JavaScript 繼承 (2)

1:純淨的繼承者 — 原型式繼承


//傳遞一個字面量函數
function obj(o) { 

   //創建一個構造函數
  function F() {}

  //把字面量函數賦值給構造函數的原型
  F.prototype = o;

  //最終返回出實例化的構造函數 
  return new F(); 
}

//字面量對象
var box = {        
  name: 'lume',
  books: ['JavaScript', 'python', 'go']
};


var box1 = obj(box);   //傳值

 console.log(box1.name);  // lume

box1.name = 'lumi';   // lumi 

console.log(box1.name);

console.log(box1.books);

box1.books.push('java');

console.log('box1',box1.books);
var box2 = obj(box);    //傳值

console.log(box2.name);

console.log('box2',box2.books);     //引用類型共享了

結果如圖:
這裏寫圖片描述
這裏我們可以看到 box2 的引用類型的值 也被修改了 ! ,還有不明白的 可以看下 注意下 上面代碼的註解 理解下 !

2:如虎添翼 —– 寄生式繼承
寄生式繼承就是把原型式繼承再次封裝,然後在對象上擴展新的方法,再把新對象返回

// 先寫一個原型
function fn(obj) {
  var F = function(){}
  F.prototype = obj;
  return new F;
}


var book = {
  name: "JavaScript book",
  books : ["python","go"]
}

function createBook(obj){
  // clone 一個新對象
  var clone = fn(obj);

  // 增強新對象
  clone.age = 18;
  clone.getName = function(){
    console.log(name);
  }

  return clone;   // 最後返回這個新對象

}

var obj1 = new createBook(book);

console.log(obj1.books);  // ["python","go"]

3: 終極繼承者 —- 寄生組合式繼承

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章