我有一个功能
function Person(name){
this.name = name;
return this;
}
alert(Person("somename"));
这是返回[对象窗口],我们如何将其更改为[对象对象]?有没有什么办法可以改变这个函数来获取[对象对象]而不改变签名。
答案 0 :(得分:1)
在Javascript中,当您调用函数时:
Person("somename")
该函数调用中的this
指针设置为全局对象或undefined
(如果以严格模式运行)。这就是你的陈述中发生的事情:
alert(Person("somename"));
如果您希望Person()
作为构造函数自动为您创建新的Person
对象,那么您必须包含new
运算符,如下所示:
alert(new Person("somename"));
new
运算符然后创建该类型的新对象,然后调用构造函数,并将this
指针设置为该新对象。这正是它的用途。此外,在使用return this
构造函数时,无需执行new
,因为这是自动完成的。
您可以在不使用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
也可以使代码更具可读性,因为在创建新对象和刚刚调用函数时它更明显。