JavaScript 继承 (2)

笔墨是小舟IP属地: 江苏
0.282字数 117
timg (2).jpeg

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);     //引用类型共享了

结果如图:


9800.png

这里我们可以看到 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"]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
1人点赞
笔墨是小舟负暄梧桐 做个学童 朝朝暮暮练功夫,不急不急 何必要急,一本一本读书 一字一字思索, 时光如梭...
总资产15共写了3.3W字获得111个赞共26个粉丝