来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
确保这指向正确的事情,无论如何 对象被实例化可能很困难。但是,有一个简单的 成语使这更容易。
var Person = function(firstName) {
if (this instanceof Person) {
this.firstName = firstName;
} else {
return new Person(firstName);
}
}
为什么我们要回新人?
其他情况如何实际发生?
答案 0 :(得分:2)
Person
只是一个常规功能。不同之处在于如何调用它:
1)可以作为构造函数调用
var p = new Person('Bill Gates');
构造函数中的this
上下文是Person
的一个实例。 this instanceof Person
评估为true
在将函数作为构造函数调用时,将自动返回新创建的对象。
2)作为常规函数调用
var p = Person('Bill Gates');
this
是严格模式下的Window
对象或undefined
。 this instanceof Person
评估为false
但是,为了仍然在简单调用上接收对象,手动调用new Person(firstName)
以返回正确的对象。
在this post中查看更多详情。
答案 1 :(得分:0)
没有要求你的"班级"使用Person
运算符调用函数new
。
如果是,则函数内this
的值将是Person
类的实例。
如果它不像var p = Person('Toskan')
那样,则this
的值将成为全局对象,并且原型不能正确设置为{{1对象。为了解决这个问题,该函数显式返回使用Person.prototype
关键字调用函数的结果。