Javascript 繼承和克隆
個人總結: call 繼承的是父類私有
prototype 繼承的父類公有
create 可以將公有或私有繼承到子類上去(克隆)
for in 克隆 不管公有還是私有的都克隆成私有的
1.原型繼承:將父類的私有和公有都繼承子類的原型上。子類的原型等於父類的實例。(私有公有全部繼承)
function A() {
this.name=‘aaa‘
}
A.prototype.x=50;
function B() {
this.age=‘bbb‘
}
B.prototype.y=100;
B.prototype=new A;
var b=new B;
console.log("xsx------="+b.x); //50
console.log("xsx------="+b.name);//aaa
2.call繼承:將父類的私有繼承子類的私有。(prototype為公有)
function A() {
this.name=‘aaa‘
}
A.prototype.x=50;
function B() {
this.age=‘bbb‘
A.call(this)
}
B.prototype.y=100;
var a=new A;
var b=new B;
console.log("xsx------="+b.x); //undefined
3.冒充對象繼承:將父類的私有和公有都繼承子類私有的。
function A() {
this.name = ‘aaa‘
}
A.prototype.x = 50;
function B() {
this.age = ‘bbb‘
var teme = new A
for (var k in teme) {
this[k]=teme[k]
}
}
B.prototype.y = 100;
var a = new A;
var b = new B;
console.log("xsx------=" + b.x); //50
4.混合繼承:將父類私有繼承子類私有,再將父類的私有和公有繼承子類公有。采用call繼承和原型繼承,私有被繼承兩次。
function A() {
this.name = ‘aaa‘
}
A.prototype.x = 50;
function B() {
this.age = ‘bbb‘
A.call(this) //call 是用來繼承私有的
}
B.prototype.y = 100;
B.prototype = new A;
var a = new A;
var b = new B;
console.log("xsx------=" + b.name);//aaa
5.組合繼承:私有繼承私有,公有繼承公有
function A() {
this.name = ‘aaa‘
}
A.prototype.x = 50;
function B() {
this.age = ‘bbb‘
A.call(this) //call 是用來繼承私有的
}
B.prototype =Object.create(A.prototype); //繼承私有
B.prototype.y = 100;
var a = new A;
var b = new B;
console.log("xsx------=" + b.name);//aaa
Javascript 繼承和克隆