好程式設計師web前端教程之JS繼承實現方式解析
好程式設計師 web 前端教程 之JS 繼承實現方式解析 , JS 是 Web 前端三要素之一,也是每一個初學前端的同學遭遇的第一條攔路虎。很多人反應 JS 學習不易,各類知識點概念及應用常常讓人抓耳撓腮。在接下來的 北京 Web 前端進階課中, 好程式設計師 小編就給大家簡單介紹一下JS 的繼承方式。
什麼是繼承?
繼承就是讓一個型別( 可以透過建構函式或者 class 來定義 ) 的物件能夠訪問另外一個型別的屬性和方法,它是類和類之間的一種關係,通常說子類繼承父類。但這裡容易出現一個誤區:認為例項繼承了某個類 , 某人有響應的屬性和方法是因為他繼承人類,這種說法是錯誤。
實現繼承的方式有很多種,本次課程中小編給大家分享四種:藉助建構函式實現繼承、原型繼承、組合繼承、ES6 繼承。
1 、藉助建構函式實現繼承
function Person(name,age){ // 定義了一個父類
this.name = name;
this.age = age;
this.sayHello = function(){
console.log(this.name);
}
}
function Male(name,age){ // 定義了一個子類 男性類
// 繼承父類,讓子類具有相應的屬性和方法
//call 或者 apply 的用法
// 建構函式里的 this 指向例項
Person.call(this,name,age);
this.hx = "true";// 除了繼承過來的屬性和方法,還能新增針對於子類自身的屬性和方法
}
function FeMale(name,age){ // 定義了一個子類 女性類
Person.call(this,name,age);
this.hj = "no";
}
var male = new Male("chenjinfeng",20);
male.sayHello();
2 、原型繼承
function Person(){
}
Person.prototype.name = "john";
Person.prototype.age = 20;
Person.prototype.sayHello = function(){
console.log(this.name);
}
function Male(){
}
Male.prototype = new Person();//Male.prototype.__proto__ == Person.prototype 透過這行程式碼就實現繼承
// 查詢流程 male 的 __proto__(Male.prototype) 上面有沒有 sayHello,
// 如果沒有繼續查詢 male.__proto__.__proto__(Male.prototype.__proto__) 就是查詢 Person.prototype
var male = new Male();
male.sayHello();
3 、組合繼承
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function(){
console.log(this.name);
}
function Male(name,age){
Person.call(this,name,age);// 只能繼承例項屬性
}
// 只考慮繼承原型方法 是不是就可以了 讓 Male 的原型物件也有 Person 原型物件上的方法
/* Male.prototype = Person.prototype;
//sayHi 方法是我子類獨有的方法
Male.prototype.sayHi = function(){
console.log("hi");
}
var male = new Male("john",20);
male.sayHello();
var person = new Person("aa",22);
person.sayHi();// 完了,父類居然能訪問子類的方法,繼承徹底亂了,原因是 Male.prototype 和 Person.prototype 指向一樣,任何一方改變,都會影響另一方 */
for(let attr in Person.prototype){
Male.prototype[attr] = Person.prototype[attr];
}
Male.prototype.sayHi = function(){
console.log("hi");
}
var male = new Male("john",20);
male.sayHello();
male.sayHi();
var person = new Person("aa",22);
person.sayHi();
4 、 ES6 繼承
class Person{
constructor(name,age){
this.name = name;
this.age = age;
}
sayHello(){
console.log(this.name);
}
// 擴充套件,定義類方法
static foo(){
console.log(" 這是類方法,不是例項方法 ");
}
}
// 透過 extends 這個關鍵字實現繼承
class Male extends Person{
constructor(name,age){
super(name,age);//1. 建立 this 物件 2.super 指向父類的建構函式
this.sexy = " 男 ";// 新增子類的例項屬性
}
// 在子類的原型方法裡使用了父類的原型方法
sayHi(){
console.log("hi");
super.sayHello();//super 指向誰 ? 指向父類的原型物件
}
static foo1(){
super.foo(); //super 指向父類
}
}
var male = new Male("john",20);
//male.sayHello();
male.sayHi();
Male.foo1();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2687422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Web前端------JS高階繼承的實現方式Web前端JS繼承
- 好程式設計師web前端教程之Node.Js流程程式設計師Web前端Node.js
- 好程式設計師web前端學習教程之Node Js流程程式設計師Web前端JS
- 好程式設計師web前端分享js實現實戰案例程式設計師Web前端JS
- 好程式設計師分享JavaScript六種繼承方式詳解程式設計師JavaScript繼承
- 好程式設計師Web前端教程之React原理解析及最佳化技巧程式設計師Web前端React
- 好程式設計師web前端教程分享js檔案引用編碼方式程式設計師Web前端JS
- 好程式設計師前端教程css中可被繼承和不可被繼承的屬性程式設計師前端CSS繼承
- 好程式設計師web前端教程之前端模組化開發程式設計師Web前端
- 好程式設計師web前端教程分享js閉包程式設計師Web前端JS
- 好程式設計師web前端教程分享js模板模式程式設計師Web前端JS模式
- 好程式設計師web前端培訓分享JavaScript學習筆記閉包與繼承程式設計師Web前端JavaScript筆記繼承
- 好程式設計師web前端教程之詳解JavaScript嚴格模式程式設計師Web前端JavaScript模式
- 好程式設計師web前端分享js剪下板Clipboard.js 使用程式設計師Web前端JS
- js實現繼承的三種方式JS繼承
- JS 繼承的 六 種實現方式JS繼承
- 好程式設計師web前端教程:字串程式設計師Web前端字串
- 好程式設計師解析Web前端中的IoC是什麼程式設計師Web前端
- 好程式設計師web前端教程分享js reduce方法使用教程程式設計師Web前端JS
- 好程式設計師web前端教程分享JS基礎知識程式設計師Web前端JS
- 好程式設計師Web前端分享前端CSS篇程式設計師Web前端CSS
- js繼承方式JS繼承
- 好程式設計師web前端分享應該怎樣學好web前端?程式設計師Web前端
- 好程式設計師web前端分享web測試之Js中的變數程式設計師Web前端JS變數
- 好程式設計師web前端教程分享Vue.js面試題程式設計師Web前端Vue.js面試題
- 好程式設計師web前端分享JS引擎的執行機制程式設計師Web前端JS
- 好程式設計師web前端分享web前端入門知識程式設計師Web前端
- 好程式設計師web前端精講 web前端三要素程式設計師Web前端
- 好程式設計師大資料教程Scala系列之繼承程式設計師大資料繼承
- 繼承的實現方式繼承
- 好程式設計師web前端教程分享web前端基礎知識程式設計師Web前端
- 好程式設計師web前端學習路線nodeJs學習過程之認識nodejs程式設計師Web前端NodeJS
- 好程式設計師web前端教程分享js中的模組化二程式設計師Web前端JS
- 好程式設計師web前端教程分享js中的模組化一程式設計師Web前端JS
- 好程式設計師Web前端中的js能運用到哪些方面程式設計師Web前端JS
- 好程式設計師web前端分享如何理解JS的單執行緒程式設計師Web前端JS執行緒
- 好程式設計師web前端帶你瞭解JS的作用域鏈程式設計師Web前端JS
- 好程式設計師分享Web前端開發工具程式設計師Web前端