第五章 繼承

在JS中可能的繼承模式有很多。在本章中,我們將研究幾種最為直接的模式。當然還有很多更為復雜的構造模式,但保持簡單通常是最好的。

1. 偽類

var Mammal = function (name){
    this.name = name;
}

Mammal.prototype.getName = function (){
    return this.name;
};

Mammal.prototype.says = function (){
    return this.saying || '';
};

var myMammal = new Mammal('hello the mammal');

var name = myMammal.getName();

現在,我們可以構造另一個偽類來繼承Mammal,這是通過定義他的 constructor 函數并替換它的 prototype 為一個Mammal的實例來實現的。

var Cat = function(name){
    this.name = name;
    this.saying = 'meow';
}

//替換Cat.prototype 為一個新的 Mammal 實例

Cat.prototype = new Mammal();

//擴充新原型,增加 purr 和 get_name 方法

Cat.prototype.purr = function(n) {
    var i, s = '';
    for( i = 0; i < n; i ++ ){
        if(s){
            s += '-'
        }
        s += 'r';
    }
    return s;
}

Cat.prototype.getName = function(){
    return this.says() + ' ' + this.name + ' ' + this.says();
}

var myCar = new Cat('Henrietta');
var says = myCar.says();
var purr = myCar.purr(5);
var name = myCar.getName();

"偽類"形式可以給不熟悉js的程序員提供便利,但它也隱藏了該語言的真實的本質。借鑒類的表示法可能誤導程序員去編寫過于深入與復雜的層次結構。

2 對象說明符

有時候,構造期要接受一大串參數,這可能令人煩惱。

我本人深有體會,之前寫的函數里接受的參數比較多,導致別人不好調用。

所以,最好的方法:

var parame = {
    first: f,
    middle: m,
    last: l,
    state: s,
    city: c
}

var myObject = maker(parame);
  1. 原型

基于原型的繼承

  1. 函數化
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.繼承(接口繼承和實現繼承) 繼承是 OO 語言中的一個最為人津津樂道的概念。許多 OO 語言都支持兩種繼承方式...
    believedream閱讀 981評論 0 3
  • 特別說明,為便于查閱,文章轉自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 1,160評論 0 4
  • 本章內容 理解對象屬性 理解并創建對象 理解繼承 面向對象語言有一個標志,那就是它們都有類的概念,而通過類可以創建...
    悶油瓶小張閱讀 869評論 0 1
  • 基于這篇文章的一些名稱約定: 上面的約定應該是比較合理的,如果難以理解,可以查看黯羽輕揚:JS學習筆記2_面向對象...
    一直玩編程閱讀 535評論 1 7
  • 她的眼神一點一點變壞,成就了我命運的意外。逃離了我生活的 云海,她變成了她理想的自在。而也依然現在馬路牙子之外,風...
    李一十八閱讀 152評論 0 1