關(guān)于Js繼承的一個(gè)小問題

科技 未結(jié) 11 638
360U3204741053
360U3204741053 2023-05-18 07:16

昨天遇到的一個(gè)問題:
對(duì)于兩個(gè)普通的對(duì)象a,b
var a = {

foo:1,methodA:function(){ console.log(this.foo);}

}

var b = {

bar:2,methodB: function(){ console.log(this.bar); }

}
可以不考慮執(zhí)行環(huán)境的兼容性,實(shí)現(xiàn)下面要求:
1 執(zhí)行a.methodA()輸出1;
2.執(zhí)行a.methodB()輸出2;
3.執(zhí)行b.bar=3;a.methodB()輸出3

上面的就是題目,首先想到的就是繼承,a繼承b,可以直接調(diào)用b的methodB方法。在題目的基礎(chǔ)上,我會(huì)這么實(shí)現(xiàn)的:

function A(){

this.foo = foo; this.methodA = function(){ console.log(this.foo); } B.call(this)//實(shí)現(xiàn)繼承

}

function B(){

this.bar = bar; this.methodB = function(){console.log(this.bar); }

}
var a = new A();
var b = new B();

執(zhí)行下面的代碼:
a.methodA()//輸出1;
a.methodB()//輸出2;
b.bar=3;a.methodB() //仍輸出2

很顯然不符合要求。
求大神告知產(chǎn)生的原因和解決的方法。 難道是我一開始就理解的不正確嗎?

11條回答
提交回復(fù)