前端學習輯錄(1):js繼承總結
這是博主目前學習並掌握到的繼承方式,並不能完整覆蓋到所有的繼承方式,會在學習中持續更新ヾ(◍°∇°◍)ノ゙。
一、原型繼承
為了資料共享,改變原型指向,做到了繼承==>通過改變原型指向實現的繼承。
//建立人這個建構函式;
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.sayHi=function () {
console.log("您好");
};
//建立學生這個建構函式
function Student(score) {
this.score=score;
}
//改變學生的原型的指向========>使得學生繼承人
Student.prototype=new Person("小李",20,"男")
Student.prototype.study=function () {
console.log("學習是一件持之以恆的事");
};
var stu = new Student(100);
stu.sayHi();
stu.study();
缺陷:因為改變原型指向的同時實現繼承,直接初始化了屬性,繼承過來的屬性的值都是一樣的了。
不能實現多繼承(一個子類同時繼承多個父類)。
解決方案:繼承的時候,不用改變原型的指向,直接呼叫父級的建構函式的方式來為屬性賦值。
二、借用建構函式繼承
借用建構函式:建構函式的名字.call(當前物件,屬性,屬性…)
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.sayHi=function () {
console.log("您好");
};
//借用建構函式:屬性值重複的問題==>繼承屬性
//通過使用call改變this指向,指向父類例項,相當於複製父類例項的屬性給子類
function Student(name,age,sex,score) {
Person.call(this,name,age,sex);
this.score=score;
}
var stu= new Student("小李",20,"男",100);
console.log(stu.name,stu.age,stu.sex,stu.score);
stu.sayHi();//報錯
主要解決屬性的問題,不能很好的解決方法繼承的問題。
三、組合繼承
組合繼承:原型繼承+借用建構函式繼承。
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.sayHi=function () {
console.log("您好");
};
function Student(name,age,sex,score) {
//借用建構函式:屬性值重複的問題==>繼承屬性
Person.call(this,name,age,sex);
this.score=score;
}
//改變原型繼承==>繼承方法
Student.prototype = new Person();//不傳值
var stu = new Student("小李",20,"男",100);
console.log(stu.name,stu.age,stu.sex,stu.score);
stu.sayHi();
優點:可以同時繼承屬性和方法。
四、拷貝繼承
拷貝繼承;把一個物件中的屬性或者方法直接複製到另一個物件中。
function Person() {
}
Person.prototype.name="小李";
Person.prototype.age="20";
Person.prototype.sex="男";
Person.prototype.sayHi=function () {
console.log("您好呀");
};
var obj1 ={};
//Person的構造中有原型prototype,prototype就是一個物件,那麼裡面,age,sex,height,play都是該物件中的屬性或者方法。
for(var key in Person.prototype){
obj1[key]=Person.prototype[key];
}
console.log(obj1);
obj1.sayHi();
缺點:因為每次都要執行遍歷,造成記憶體消耗嚴重,效率低。
總結
總結常用的四種繼承,以及他們的優缺點。
相關文章
- JS中繼承方式總結JS中繼繼承
- maven 學習總結(五)——聚合與繼承Maven繼承
- JS物件導向:JS繼承方法總結JS物件繼承
- JavaScript繼承總結JavaScript繼承
- js 繼承小結JS繼承
- JS 總結之原型繼承的幾種方式JS原型繼承
- JS繼續學習記錄(一)JS
- Javascript繼承機制總結JavaScript繼承
- JavaScript 學習之繼承JavaScript繼承
- JAVA入門學習初步總結3 方法類繼承多型等Java繼承多型
- 重學 JS 系列:聊聊繼承JS繼承
- js繼承JS繼承
- 【博學谷學習記錄】超強總結,用心分享|前端CSS總結(一)前端CSS
- Objective c 知識總結 繼承Object繼承
- JAVA學習筆記-繼承Java筆記繼承
- Scala學習(八)---Scala繼承繼承
- [總結]學習目錄
- JS原型繼承和類式繼承JS原型繼承
- js之繼承JS繼承
- js繼承方式JS繼承
- c++學習(1)--C++封裝、繼承、多型C++封裝繼承多型
- Angularjs 學習總結AngularJS
- shell學習總結-1
- Redis學習總結1Redis
- 學習心得總結(1)
- bootstrap學習總結1boot
- Java學習筆記之繼承Java筆記繼承
- JavaScript學習3:原型和繼承JavaScript原型繼承
- Web前端------JS高階繼承的實現方式Web前端JS繼承
- QT學習記錄總結QT
- 關於繼承的一些小總結繼承
- JS原型鏈繼承JS原型繼承
- JS 相容、繼承、bind、thisJS繼承
- js繼承圖解JS繼承圖解
- JS中的繼承JS繼承
- NestJS學習總結篇JS
- Ember.js學習總結JS
- java學習——物件導向之繼承Java物件繼承