如果我有课:
class Haha
constructor: (@lolAmount = 1) ->
alert @lolAmount
我想检查一个对象是否属于正确的类,使用它是否总是安全的constructor.name
:
haha = new Haha()
unless haha.constructor.name is 'Haha'
throw Error 'Wrong type'
还是使用更好instanceof
:
haha = new Haha()
unless haha instanceof Haha
throw Error 'Wrong type'
我支持的一个论点instanceof
是在使用时extends
:
class BigHaha extends Haha
bigHaha = new BigHaha
console.log bigHaha instanceof Haha #true
但作为一个 JavaScript 操作员,它有多安全——我觉得我应该对此持怀疑态度。
另一方面,与constructor.name
正在发生的事情非常清楚。是否保证constructor.name
将在所有对象上设置?
感谢您提供任何信息。
首先,constructor也是直接的 JavaScript:
返回对创建实例原型的 Object 函数的引用。
所以当你说o.constructor
,你真的是在直接执行 JavaScript,名字constructor
对于 CoffeeScript 对象的初始化函数是另一回事。
所以现在你可以选择使用 JavaScriptconstructor
属性或 JavaScript 的instanceof
操作员。这constructor
只是告诉您使用什么“类”来创建对象,instanceof另一方面:
[...]测试一个对象的原型链中是否有prototype
构造函数的属性。
So instanceof
如果您想允许子类化,这是正确的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)