[英]How does JavaScript's instanceof operator work?
在使用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
如果我們將表達式布置為object instanceof constructor
方法的object instanceof constructor
則它將檢查一下是否constructor.prototype
在object
的原型中。
資料來源: MDN
等同於instanceof
運算符的功能可以用純Java語言實現,如下所示:
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__
屬性(現已棄用/不推薦使用)來提供對相同信息的訪問。
這些都返回true的原因是因為它們都具有要檢查的指定函數的原型
當你做
Instance instanceof TheFunction
它將查看Instance
所有prototype
,並檢查TheFunction.prototype
是否在其中
從Mozilla:
instanceof運算符用於測試對象的原型鏈中是否具有構造函數的prototype屬性。
當然是原型。 原型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.