函数中的this是存在,就看这个this被绑定到哪个对象了
当一个函数用作构造函数时(使用new关键字),它的this
被绑定到正在构造的新对象。
/*
* 构造函数这样工作:
*
* function MyConstructor(){
* // 函数实体写在这里
* // 根据需要在this上创建属性,然后赋值给它们,比如:
* this.fum = "nom";
* // 等等...
*
* // 如果函数具有返回对象的return语句,
* // 则该对象将是 new 表达式的结果。
* // 否则,表达式的结果是当前绑定到 this 的对象。
* //(即通常看到的常见情况)。
* }
*/
function C(){
this.a = 37;
}
var o = new C();
var t = new C();
console.log(o.a); // logs 37
o.a = 40;
console.log(o.a); // logs 40
console.log(o.a); // logs 37
//上面代码,新创建的对象o和t都被绑定到了构造函数的this对象上,这个this对象中如果存在数组或者对象那么对于o和t对象来说肯定是共享的,这也就是原型出现的原因。
//现在对于this想法就是,本就存在于函数中,就看之后使用的时候这个this被绑定到那个对想上了。
//至于函数中使用var或let等声明的变量,纯粹就是为了把这个变量限制在这个函数作用域
function C2(){
this.a = 37;
return {a:38};
}
o = new C2();
console.log(o.a); // logs 38