javascript - 对象构造 : test if this is instanceOf Object

标签 javascript node.js ecmascript-5

我在 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/

相关文章:

javascript - 查询mongoose数据库中的数据

java - 从 IE9 中的 javascript 检查 applet 中是否存在 Java 函数

javascript - 在node.js中如何引用当前目录下面的目录

node.js - Nodejs fs.FSWatcher

JavaScript new 关键字的使用和内存管理

javascript - Object.create 而不是构造函数进行继承

javascript - 在javascript中使用按位或转换为整数

javascript - 如何使用 javascript 和 css 在 gmail 中显示侧边栏面板?

javascript - jQuery 文件上传总是失败并显示 "File upload aborted"

Node.js - 强大的 XHR 上传