JS 繼承方法總結

2021-09-12 17:29:17 字數 1959 閱讀 8744

function

person()

}var p1=

newperson()

;var p2=

newperson()

; console.

log(p1.say === p2.say)

;//false

核心: 將父類的例項作為子類的原型

function cat()

cat.prototype = new animal();

cat.prototype.name = 'cat';

// test code

var cat = new cat();

console.log(cat.name);

console.log(cat.eat('fish'));

console.log(cat.sleep());

console.log(cat instanceof animal); //true

console.log(cat instanceof cat); //true

特點:

缺點:

person.prototype =

, run:

function()

}

var o1=

;var o2 = o1;

//var o2=

o2.age=18;

//1、修改了o2物件的age屬性

//2、由於o2物件跟o1物件是同乙個物件

//3、所以此時o1物件的age屬性也被修改了

var o3=

;var o4=

;//上述**中,如果使用拷貝繼承對**進行優化會非常和諧

//實現拷貝繼承:

//1、已經擁有了o3物件

//2、建立乙個o3物件的拷貝(轉殖):for...in迴圈

//3、修改轉殖物件,把該物件的name屬性改為"李四"

var source=

var target=

; target.name=source.name

target.age=source.age;

var students=[,

]

上面的方式很明顯無法重用,實際**編寫過程中,很多時候都會使用拷貝繼承的方式,所以為了重用,可以編寫乙個函式把他們封裝起來:

function

extend

(target,source)

return target;

}extend

(target,source)

es6中有了 《物件擴充套件運算子》 彷彿就是專門為了拷貝繼承而生:

var source=

//讓target是乙個新物件,同時擁有了name、age屬性

var target=

var target2=

使用方式:

var o1=

}var o2=object.

create

(o1)

;

function

animal

(name,age,gender)

function

person

(name,age,gender,say)

}

function

animal

(name,age)

function

person

(name,age,address)

Js各種繼承方法總結

原型鏈方式 function classa classa.prototype.color red classa.prototype.saycolor function function classb classb.prototype new classa var b new classb conso...

JS物件導向 JS繼承方法總結

物件導向中,繼承相對是比較難的,即使看了很多文章,可能依然不明白,下面我談談我的理解。1.建構函式繼承 function p0 function children0 通過這種在子類中執行父類的構造函式呼叫,把父類建構函式的 this 指向為子類例項化物件引用,從而導致父類執行的時候父類裡面的屬性都會...

JS 繼承總結

es裡面沒有真正的繼承,但是能通過某些手段達到繼承效果,從而讓乙個類擁有另外乙個類的方法 類 建構函式 繼承描述某語言環境 魔獸世界 哈!其實我沒玩過 魔獸世界裡面 有humen類 humen類裡面有gnome 侏儒 gnome有方法say 我的名字 有共有屬性ggroup gnome humen ...