1. 程式人生 > >Javascript 繼承和克隆

Javascript 繼承和克隆

私有繼承 log create ron 私有 ole new 克隆 var

個人總結: 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 a=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

console.log("xsx------="+b.name); //aaa


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

console.log("xsx------=" + b.name);//aaa

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 繼承和克隆