原型作用:資料共享,目的:為了節省記憶體空間,
原型作用:繼承 目的是:為了節省記憶體空間
原型繼承:改變原型的指向
借用建構函式繼承: 主要解決屬性的問題
組合繼承:原型繼承+借用建構函式繼承
function person(name, age, ***, weight)
person.prototype.sayhi = function()
function student(score)
//希望人的類別中的資料可以共享給學生---繼承
student.prototype = new person("小明", 10, "男", "50kg")
var stu1 = new student("100")
stu1.sayhi()
console.log(stu1.name, stu1.age, stu1.***, stu1.weight, stu1.score)
var stu2 = new student("120")
stu2.sayhi()
console.log(stu2.name, stu2.age, stu2.***, stu2.weight, stu2.score)
var stu3 = new student("130")
stu3.sayhi()
console.log(stu3.name, stu3.age, stu3.***, stu3.weight, stu3.score)
原型繼承: 為了資料共享,改變原型指向,做到了繼承----通過改變原型指向實現的繼承
缺陷:因為改變原型指向的同時實現繼承,直接初始化了屬性,繼承過來的屬性的值都是一樣的了,所以,這就是問題
只能重新呼叫物件的屬性進行重新賦值
解決方案:繼承的時候,不用改變原型的指向,直接呼叫父級的建構函式的方案來為屬性賦值就可以了-----借用建構函式:把要繼承的父級的建構函式拿過來,使用一下就可以了。
function person(name, age, ***, weight)
person.prototype.sayhi = function()
function student(name, age, ***, weight, score)
var stu1 = new student("小明", 10, "男", "50kg", "100")
console.log(stu1.name, stu1.age, stu1.***, stu1.weight, stu1.score)
var stu2 = new student("小紅", 10, "女", "50kg", "120")
console.log(stu2.name, stu2.age, stu2.***, stu2.weight, stu2.score)
var stu3 = new student("小綠", 10, "男", "50kg", "130")
console.log(stu3.name, stu3.age, stu3.***, stu3.weight, stu3.score)
借用建構函式:建構函式名字.call(當前物件,屬性,屬性,屬性....);
解決了屬性繼承,並且值不重複的問題
缺陷:父級類別中的方法不能繼承
function person(name, age, ***)
person.prototype.sayhi = function()
function student(name, age, ***, score)
//改變原型指向----繼承
student.prototype = new person() //不傳值
student.prototype.eat = function()
var stu = new student("小白", 20, "男", "100分")
console.log(stu.name, stu.age, stu.***, stu.score);
stu.sayhi()
stu.eat()
var stu1 = new student("小黑", 22, "女", "120分")
console.log(stu1.name, stu1.age, stu1.***, stu1.score);
stu1.sayhi()
stu1.eat()
//屬性和方法都被繼承了
組合繼承:原型繼承+借用建構函式繼承
屬性和方法都被繼承了
因此,組合繼承是結合了原型繼承和借用建構函式繼承,所以組合繼承更適用。 關於javascript的原型繼承
經常會看到乙個 array prototype.slice.call arguments 這樣的用法。對於prototype和call函式難以理解。無意中在一篇部落格中看到這樣一幅圖,頓時明白了許多。比如說通過function建立了乙個函式person,這個person就是乙個特殊的物件。假設per...
關於js原型繼承
js的每個類都有乙個prototype物件 訪問物件的屬性時,會先訪問到物件自身是否有定義這個屬性 如果沒有定義,就會去訪問物件所屬型別的prototype物件是否有此屬性 原型繼承就是把型別的prototype指向乙個父類的新物件,這樣每派生乙個新類出來都會構造乙個新的父類物件作為原型,這個物件和...
關於繼承和原型鏈
繼承是父物件的成員,子物件不用重複建立,也可以直接使用 這樣就可以節約記憶體,重用。那我們什麼時候使用繼承呢?只要一類子物件,都需要相同的甦醒或功能時,只要將相同的屬性和功能僅在父物件中定義一次即可。那我們怎麼使用呢,js中的繼承都是繼承原型物件。原型物件又是什麼呢?它是專門集中儲存一類子物件相同屬...