【问题标题】:instanceof operator Vs obj.constructorinstanceof 运算符与 obj.constructor
【发布时间】:2017-11-15 06:24:13
【问题描述】:

我想知道这两种检查对象是否是类/构造函数的实例的方法之间是否有任何区别。我搜索了一下,找到了这两种方法。

obj instanceof SomeConstructor

obj.constructor === SomeConstructor

所以我的问题是: 两者有区别吗?

哪个是更好的做法?

另外,还有比这两个更好的方法吗?

【问题讨论】:

  • 一个对象可以是一个instanceOf多个构造函数。它只能返回一个 constructor 属性值,该属性值可能不指向任何 instanceOf 返回 true 的对象。
  • @Dane 先生,这个问题只回答了我的 3 个查询中的一个。所以我认为它不应该是重复的。
  • @RohitAgrawal — 在某种程度上它回答了第二个问题,因为它们不能直接比较,如果没有一些标准来进行评估,你就无法真正评估“更好”。 ;-)

标签: javascript


【解决方案1】:

在网上找到这个,

实例

instanceof 运算符测试构造函数的原型属性是否出现在对象原型链中的任何位置。

构造函数

返回对创建实例对象的 Object 构造函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串。

参考

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

【讨论】:

  • 还有其他 2 个问题? ;-) 另外,第二个定义不一定正确。对象继承的 constructor 属性可以设置为任何值。
【解决方案2】:

根据@Nisal Edu 那里的解释,instanceof 将原型存在于对象链中,否则返回 false。 obj.constructor === Object 是每个返回 true 的对象的必要值。

意思是

obj.constructor === Object // always return true
obj instanceof Object //return false if prototype is nowhere in object's prototype chain

【讨论】:

  • 正如@RobG 所说,可以将对象的继承构造函数属性设置为任何值。因此,obj.constructor === Object 并不总是正确的
  • 但如果objObject,那么我认为这句话永远是正确的。
  • Object 可以是任何构造函数。例如。
  • 我想我只是为原型解释。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2012-10-15
  • 2011-01-27
  • 1970-01-01
相关资源
最近更新 更多