如果我有课:
class Haha
constructor: (@lolAmount = 1) ->
alert @lolAmount
Run Code Online (Sandbox Code Playgroud)
我想检查对象是否属于正确的类,使用它总是安全的constructor.name:
haha = new Haha()
unless haha.constructor.name is 'Haha'
throw Error 'Wrong type'
Run Code Online (Sandbox Code Playgroud)
或者它是否更好用instanceof:
haha = new Haha()
unless haha instanceof Haha
throw Error 'Wrong type'
Run Code Online (Sandbox Code Playgroud)
我有一个论点instanceof是使用时extends:
class BigHaha extends Haha
bigHaha = new BigHaha
console.log bigHaha instanceof Haha #true
Run Code Online (Sandbox Code Playgroud)
但是作为一个JavaScript运算符是多么安全 - 我觉得我应该对它持怀疑态度.
另一方面,constructor.name很明显发生了什么.是否保证constructor.name将在所有对象上设置?
谢谢你的任何信息.
为什么以下两行会返回不同的结果?
("test" instanceof String) // returns false
("test".constructor == String) // returns true
Run Code Online (Sandbox Code Playgroud)
在镀铬版本28.0.1500.95 m的控制台中测试
对于本机类型,它的工作方式有所不同吗
可以说我有一个Dog构造函数
function Dog(name) {
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
我有一个构造函数的实例
const myDog = new Dog('Charlie');
Run Code Online (Sandbox Code Playgroud)
据我最近了解,有两种方法可以检查myDog是否是Dog的一个实例:
1.
console.log(myDog instanceof Dog) //true
Run Code Online (Sandbox Code Playgroud)
2.
console.log(myDog.constructor === Dog) //true
Run Code Online (Sandbox Code Playgroud)
我的问题是,两者之间有什么区别,哪一个更好,为什么?
提前致谢.