instanceof 復(fù)雜用法
console.log(Object instanceof Object);//true
console.log(Function instanceof Function);//true
console.log(Number instanceof Number);//false
console.log(String instanceof String);//false
console.log(Function instanceof Object);//true
console.log(Foo instanceof Function);//true
console.log(Foo instanceof Foo);//false
- JavaScript instanceof 運算符代碼
function instance_of(L, R) {//L 表示左表達式蝠引,R 表示右表達式
var O = R.prototype;// 取 R 的顯示原型
L = L.__proto__;// 取 L 的隱式原型
while (true) {
if (L === null)
return false;
if (O === L)// 這里重點:當 O 嚴格等于 L 時绍载,返回 true
return true;
L = L.__proto__;
}
}
顯示原型 : prototype 只要創(chuàng)建一個新的函數(shù),就會為該函數(shù)創(chuàng)建一個prototype屬性.該屬性指向函數(shù)的原型對象.所有原型對象都會自動獲得一個constructor構(gòu)造函數(shù)屬性,該屬性指向prototype屬性所在函數(shù)的指針.
隱式原型 : __prototype__ 隱式原型指向創(chuàng)建這個對象的函數(shù)的prototype.
function P(){}
let p1 = new P();
p1.__proto__ === P.prototype //true
P.prototype // {constructor: ?}
P.prototype.constructor === P //true
P.__proto__ === Function.prototype //true
注意:
通過Function.prototype.bind方法構(gòu)造出來的函數(shù)沒有prototype屬性。
Object.prototype.這個對象的是個例外,它的__proto__值為null。