js高階_原型鏈面試題
阿新 • • 發佈:2022-03-13
面試題1
例項的__proto__屬性是例項被建立時賦予的,這個屬性指向的是例項被建立時建構函式的prototype物件
function A(){ } A.prototype.n=1; var b=new A(); A.prototype={ n:2, m:3 } var c=new A(); console.log(b.n+","+b.m+","+c.n+","+c.m);//1 undefind 2 3
2面試題
只要是物件呼叫方法,都是通過該物件的原型屬性'_ prototype _',去往原型物件找,原型物件找不到再去原型的額原型找,直到原型鏈盡頭
function F(){ } Object.prototype.a=function(){ console.log('a'); } Function.prototype.b=function(){ console.log("b"); } var f=new F(); f.a(); //f.b();//報錯 F.a();//大寫F說明把F函式當作一個物件,用它的proto屬性去原型裡面找, F.b();
上面的f.b()報錯的原因:
b方法是放在Function的原型物件裡的,用例項f去呼叫首先它跟著自己的隱式原型一個一個找,最後到null也沒有找到,也就是沒有相交的部分,所以就報錯。
F.a();
將F函式當成物件,用物件的隱式原型proto屬性去找,能找到。