使用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
答案 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