当我运行以下代码时,this
会返回[object Object]
,然后返回[object Window]
。我理解this
是指函数的所有者。我理解window
是后一种情况下函数的所有者。但在前一种情况下,谁是该功能的所有者?在这种情况下,谁是[object Object]
?
function Customer(name) {
this.name = name;
alert(this);
}
var x = new Customer('John');
Customer('Smith');
答案 0 :(得分:1)
this
是新创建的对象实例,稍后将其分配给x
。
答案 1 :(得分:1)
当您使用new Constructor(arguments…)
时,会创建Constructor
的实例(继承Constructor.prototype
的新对象),然后使用Constructor
设置调用this
到那个新的实例。这正是the new
operator所做的,就像这样:
var x = Object.create(Customer.prototype);
Customer.call(x, 'Smith');
请注意,当您直接调用不属于某个属性的函数时,全局对象(window
)是默认值;例如,它与全球化没有关系。
答案 2 :(得分:1)
"这"是一个函数如何引用自身。因此,name变量被传递到函数中,然后不同的变量this.name被设置在函数" Customer。"属于customer的名称称为this.name。
答案 3 :(得分:0)
this
是对象的引用
当您使用new关键字调用函数或向对象添加函数时,它会将对该对象的引用分配给this
。在new
关键字的情况下,该函数还返回对象的引用,这与this
function Test(name){
this.myName = name;
}
var t = new Test("Obj1");
console.log(t.myName ); // Obj1
Test("Obj2"); // no reference is created and the this keyword stays as is.
console.log(this.myName ); // Obj2
// which is the same as
console.log(window.myName ); // Obj2