JavaScript的运算符如何运作?

时间:2014-05-12 16:56:33

标签: javascript prototype

使用Foo.prototype = Object.create(Bar.prototype)创建继承链后,JavaScript instanceof使用哪些属性来确定对象是特定类的实例?

例如:

var Fruit = function() {};

var Banana = function() {};
Banana.prototype = Object.create(Fruit.prototype);

var YellowBanana = function() {};
YellowBanana.prototype = Object.create(Banana.prototype);

console.log((new Fruit) instanceof Fruit); // true
console.log((new Banana) instanceof Fruit); // true
console.log((new YellowBanana) instanceof Banana); // true
console.log((new YellowBanana) instanceof Fruit); // true

4 个答案:

答案 0 :(得分:2)

如果我们将表达式排列为object instanceof constructor,那么它会检查constructor.prototype原型中是否object

来源:MDN

答案 1 :(得分:1)

instanceof运算符等效的功能可以在这样的普通Javascript中实现:

function instance_of(obj, constructor) {
  var o = obj, prot=constructor.prototype;
  while(o != null && o !== Object) {
    o = Object.getPrototypeOf(o);
    if(o === prot) return true;
  }
  return false;
}

使用ES5函数Object.getPrototypeOf()来访问给定对象实例的原型。所有现代浏览器和javascript环境都支持getPrototypeOf。大多数旧版浏览器依赖__proto__属性(现已弃用/不鼓励)来提供对相同信息的访问。

答案 2 :(得分:0)

这些都返回true的原因是因为他们所有都拥有您要检查的指定函数的原型

当你这样做时

Instance instanceof TheFunction

它会查看prototype的所有Instance,并检查TheFunction.prototype是否在那里

来自Mozilla:

  

instanceof运算符测试对象在其原型链中是否具有构造函数的prototype属性。

答案 3 :(得分:-4)

原型,当然。 prototype

相关问题