为什么构造函数(带“return this”)返回窗口对象?

Why does constructor function (with "return this") return window object?

本文关键字:返回 窗口 对象 this 构造函数 return 为什么      更新时间:2023-09-26

我有一个函数

function Person(name){
this.name = name;
return this;
}
alert(Person("somename"));

这是返回[对象窗口],我们如何将其更改为[对象对象]?有没有办法在不改变签名的情况下改变这个函数来获取[object object] ?

在Javascript中,当你调用一个函数时,如下所示:

Person("somename")

该函数调用中的this指针被设置为全局对象或undefined(如果在严格模式下运行)。这就是在你的语句中发生的事情:

alert(Person("somename"));

如果你想让Person()作为一个构造函数工作,自动创建一个新的Person对象,那么你必须包括new操作符,如:

alert(new Person("somename"));

new操作符然后创建该类型的新对象,然后用this指针指向该新对象调用构造函数。这正是它的作用。此外,当使用带有new的构造函数时,不需要执行return this,因为它会自动为您完成。


你可以使窗体工作,你正在使用不使用new,但然后你必须创建自己的对象在Person函数,像这样:

function Person(name){
    var p = {};      // create an empty object
    p.name = name;   // assign the name field
    return p;        // return the newly created object
}

这样做有一些缺点,特别是instanceof Person不能正常工作,所以通常首选使用new操作符。我发现使用new也使代码更具可读性,因为当你创建一个新对象和当你只是调用一个函数时,它更明显。