相关疑难解决方法(0)

CoffeeScript:使用instanceof vs Class.constructor.name

如果我有课:

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将在所有对象上设置?

谢谢你的任何信息.

coffeescript

12
推荐指数
1
解决办法
8914
查看次数

使用instanceof和检查构造函数之间有什么区别?

为什么以下两行会返回不同的结果?

("test" instanceof String) // returns false
("test".constructor == String) // returns true
Run Code Online (Sandbox Code Playgroud)

在镀铬版本28.0.1500.95 m的控制台中测试

对于本机类型,它的工作方式有所不同吗

javascript

7
推荐指数
1
解决办法
625
查看次数

将object.constructor与其构造函数和instanceof进行比较之间的差异是什么?

可以说我有一个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)

我的问题是,两者之间有什么区别,哪一个更好,为什么?

提前致谢.

javascript constructor object instance ecmascript-5

6
推荐指数
1
解决办法
50
查看次数