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 ...