对象构造:测试这是否是instanceOf Object

时间:2014-02-25 14:55:02

标签: javascript node.js ecmascript-5

我在供应商代码的对象构造函数中看到了这个测试:

function MyObject() {
  if (!(this instanceof MyObject)) return new MyObject;
  ...
}

我的第一个倾向是这个测试用于在调用构造函数时阻止绑定到另一个this值。但是,我想在这里检查一下,我还缺少一些东西。有人可以解释一下这个测试的确切意图吗?

1 个答案:

答案 0 :(得分:7)

此测试旨在确保MyObject始终用作构造函数,即:

var instance = new MyObject();

永远不会

var instance = MyObject();

会导致不需要的代码行为。

如果有人意外使用var instance = MyObject();表单,那么函数内部的this将是一个全局对象(Window),instanceof检查会在这种情况下强制进行正确的构造函数调用。

然而,有些人认为这种模式有害,因为它修复了开发人员的错误。我个人会在这种情况下抛出异常,而不是让粗心的开发人员失败,就像一切都好。