为什么构造函数(带“return this”)返回窗口对象?
Why does constructor function (with "return this") return window object?
我有一个函数
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
也使代码更具可读性,因为当你创建一个新对象和当你只是调用一个函数时,它更明显。
相关文章:
- 当我编码窗口时如何返回真或假.确认自己
- 动态弹出窗口'通过调用一个永远运行并返回's每个周期后的数据
- 窗口对象属性返回一个dom节点
- 将数据从弹出窗口返回到父窗口(SMARTY)
- 黑莓网站:窗口大小(窗口高度)在黑莓模拟器中返回不正确的值
- 为什么根据括号的位置来引用窗口或对象?并返回undefined
- 根据弹出窗口javascript的返回值更改asp.net面板的可见性
- 使用Javascript将拖动的小程序返回到浏览器窗口
- (窗口中的'ontouchstart')返回true,但没有触摸事件
- 使用HTML搜索,需要JavaScript来搜索数组并在新窗口中返回结果
- Appcelerator 中的自定义选项卡栏 - 如何返回到根窗口
- 根据在弹出窗口中单击的按钮返回 true 或 false
- JQuery 打开弹出窗口并从单击的链接返回值
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- 这将返回窗口对象
- Window.open没有't返回窗口参考IE9
- 为什么构造函数(带“return this”)返回窗口对象?
- 为什么元素的相对定位有时会返回窗口(0,0)的顶部,而在其他地方会正确返回
- 为什么这个立即调用的方法返回窗口对象
- jQuery 返回窗口对象