在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 原型鏈繼承方面的問題

原型鏈繼承方面的問題

問題:Function A(){ this.fn } 若 B .prototype = new A() 原型鏈繼承了,那 會污染到 B 的 變量空間,比如 B 中 也有 fn 怎么辦?

回答
編輯回答
心上人

判斷該方法或值在B中是否存在,會依照其原型鏈逐級查找的,并返回最接近的那個。

比如

  • A含有fn,B的原型指向A,B也有fn
    那么B.fn得到的是B的fn
  • A含有fn,B的原型指向A,B沒有fn
    那么B.fn實際得到的是A的fn
  • A沒有fn,但A的原型有,B的原型指向A,B沒有fn
    那么B.fn實際得到的是A的原型的fn
  • A以及原型沒有fn,B的原型指向A,B沒有fn
    那么,B.fn會一致追溯到null,并返回undefined

當時面試的時候我還遇到這樣的題目,可以參考一下

2017年8月30日 15:15
編輯回答
墨小白

沒有污染,只是構(gòu)造函數(shù)B創(chuàng)建的對象b具有屬性fn,其原型鏈上也具有fn屬性。

這時候訪問b.fn訪問的是b對象自身的fn屬性,訪問其父對象的fn屬性可以使用b.__proto__.fn

2017年3月21日 08:20
編輯回答
祉小皓

用new方式創(chuàng)建B的示例(假設(shè)為b)后,調(diào)用b.fn會使用B定義的this.fn而不是A定義的this.fn。只有當B中不存在時才會繼續(xù)向原型對象查找

function B() {
  this.fn = function() {
    console.log('B fn');
  }
}
function A() {
  this.fn = function() {
    console.log('A fn');
  }
  this.fn1 = function() {
    console.log('A fn1');
  }
}
B.prototype = new A();
var b = new B();
b.fn();
b.fn1();

// 輸出
b fn
a fn1
2017年11月27日 19:25
編輯回答
憶當年

自己的作用域內(nèi)找不到才會順著原型鏈找,就算同名也沒關(guān)系,先找到誰就用誰

2017年11月11日 07:50