开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情
this的指向问题
//当前的函数还不是实例化,this指向的就是window
function Car() {
this.color = 'red';//window.color = 'red'
}
Car();
function Car() {
this.color = 'red'
}
var car = new Car();
//当实例化了,this的指向将发生改变,指向当前实例化的对象
//当访问 car.color 的时候就是访问 car 对象里面的color
new的原理
function Car(color, brand) {
var me = {};
me.color = color;
me.brand = brand;
return me;
}
var car = Car('red', 'Mazda');
console.log(car.color); //red
console.log(car.brand); //Mazda
function test() {
var obj = {
name: '蓝轨迹',
color: 'blue'
}
return obj;
}
var obj1 = test();
//我们打印也能打印出来,和this也是一样
console.log(obj1.name);//蓝轨迹
new的时候,实际上是系统把this指向window的转到实例化对象上
return 问题
function Car() {
this.color = 'red';
this.brand = 'Benz';
//系统不认这个123,返回的还是 return this
return 123;
}
var car = new Car();
console.log(car.color); //red
//return {}
function Car() {
this.color = 'red';
this.brand = 'Benz';
return {};
}
var car = new Car();
console.log(car.color); //undefined
console.log(car); //{}
function Car() {
this.color = 'red';
this.brand = 'Benz';
return [];
}
var car = new Car();
console.log(car); //[]
function Car() {
this.color = 'red';
this.brand = 'Benz';
return function test() {};
}
var car = new Car();
console.log(car); //f test(){}
-
引用值 { } [ ] function
-
原始值 number string undefined
-
当实例化对象的时候,原本返回的是this,要是 原始值,系统会不认你,但是引用值的话,还是会和你返回出去的
包装类
//包装类
//原始值没有自己的方法和属性
var a = 1; //原始值
console.log(a);
var b = new Number(a);
console.log(b);//你会看到他是个对象
//new Number()是一个内置方法
b.len = 1;
b.add = function() {
console.log('今天礼拜四')
}
console.log(b);
new Number()之后就实例化了一个对象,就可以任意设置属性和方
var b = new Number(a);
var d = b + 1;
console.log(d); 2
//一个对象加上数字类型也能参与预算,最后返回原始值