我在 vendor 代码的对象构造函数中看到了这个测试:
function MyObject() {
if (!(this instanceof MyObject)) return new MyObject;
...
}
我的第一个倾向是,此测试用于防止在调用构造函数时绑定(bind)到另一个 this
值。但是,我想在这里检查一下,以防我遗漏了其他东西。有人可以解释一下这个测试的确切意图吗?
最佳答案
此测试是为了确保 MyObject
始终用作构造函数,即:
var instance = new MyObject();
永远不会
var instance = MyObject();
这会导致代码出现不需要的行为。
如果有人不小心使用了 var instance = MyObject();
形式,那么函数内部的 this
将是一个全局对象 (Window) 和 instanceof
check 在这种情况下会强制调用正确的构造函数。
但是有些人认为这种模式是有害的,因为它修复了开发人员的错误。在这种情况下,我个人会抛出一个异常,而不是让粗心的开发人员觉得一切正常。
关于javascript - 对象构造 : test if this is instanceOf Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017811/