javascript - JS : istanceof check inside constructor

标签 javascript node.js

我在多个 npm 包中发现了这部分代码:

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

查看 istanceof 运算符的定义:

The instanceof operator tests whether an object has in its prototype chain the prototype property of a constructor.

为什么要在构造函数内部检查我正在创建的对象是否是此类的实例?我什么时候会得到“假”?

最佳答案

进行此检查是为了了解该方法是否是通过 new 运算符调用的。这样您就可以制作不同的场景,主要是初始化静态内容,或返回不同类型的对象。

function myClass (options) {
    if (!(this instanceof myClass)) 
        console.log ('not instance of');
    else
        console.log('instance of');
}

myClass('test'); // not instance of
new myClass('test'); // instance of

需要提及的一件重要事情 - new 运算符实际上返回一个新对象。所以

function MyClass(opts) {

}
var a = MyClass('a');
console.log(a); // undefined

它是未定义的,因为没有 return 语句。您只需执行一个函数,并将其结果分配给a。但是,如果您使用 new 运算符(例如 var a = new MyClass('a');),结果将为 myClass {}.

关于javascript - JS : istanceof check inside constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604330/

相关文章:

javascript - Ajax javascript 在按钮下显示消息

javascript - 如何将 mxGraph 内箭头绘制为双端

javascript - jQuery 动画 div 不工作

javascript - 删除文档后如何正确删除多余的引用对象 ID

javascript - 正则表达式没有捕获值(value)

javascript - angularjs 中的正则表达式

javascript - 使用 jsPDF 将 HTML 字符串转换为 PDF

node.js - Auth0/userinfo 端点返回未经授权的错误

node.js - Dynamo 数据库分页

javascript - 将 RequireJS 主要优化文件作为 NGINX 的静态 Assets 提供