美文网首页
js非构造函数继承

js非构造函数继承

作者: 希染丶 | 来源:发表于2019-07-08 18:10 被阅读0次

1.object方法

json格式的发明人Douglas Crockford,提出了一个object()函数

function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}

实例
var Chinese = {
  nation:'中国'
};
var Doctor = {
    career:'医生'
}


Doctor = object(Chinese);

console.log(Doctor.nation) //中国

2.浅拷贝

把父对象的属性拷贝给子对象,实现继承

function extendCopy(p) {
  var c = {};
  for (var i in p) { 
    c[i] = p[i];
  }
  return c;
}

结果
var Doctor = extendCopy(Chinese);
Doctor.career = '医生';
alert(Doctor.nation); // 中国

这样的做法存在一个问题,如果父元素的属性中存在数组或者对象,拷贝过来的只是一个内存地址指向

如果给chinese对象添加一条属性

Chinese.birthPlaces = ['北京','上海','香港'];

var Doctor = extendCopy(Chinese);

Doctor.birthPlace.push('厦门');

console.log(chinese.birthPlace) //['北京','上海','香港','厦门']

如果修改Doctor.birthPlace,内存地址指向的数组被修改,chinese中的birthPlace也被修改,显然不符合预期

3.深拷贝

递归调用浅拷贝,即可实现深拷贝

function deepCopy(p, c) {
  var c = c || {};
  for (var i in p) {
    if (typeof p[i] === 'object') {
      c[i] = (p[i].constructor === Array) ? [] : {};
      deepCopy(p[i], c[i]);
    } else {
      c[i] = p[i];
    }
  }
  return c;
}
var Doctor = deepCopy(Chinese);
Chinese.birthPlaces = ['北京','上海','香港'];
Doctor.birthPlaces.push('厦门');
alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
alert(Chinese.birthPlaces); //北京, 上海, 香港

深拷贝后,birthPlace属性在doctor中就是独立存在的一个属性,而不是一个内存指向了,所以对doctor的任何操作都不会对chinese有任何影响

相关文章

  • js非构造函数继承

    //实例对象继承 对象的浅拷贝(引用数据类型存的地址一样,执行同一个内存地址) 对 象的深拷贝(引用数据类型存的地...

  • js非构造函数继承

    1.object方法 json格式的发明人Douglas Crockford,提出了一个object()函数 2....

  • JavaScript如何实现继承?

    JS 中的继承主要分为两种:原型继承和非原型继承,非原型继承又分为寄生方式继承、借用或伪造构造函数方式继承、组合方...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • js继承

    关于js继承,阮一峰的文章介绍的非常详细; 继承两种模式:1.构造函数模式2.非构造函数模式 http://www...

  • 构造函数继承-非构造函数继承

    1.constructor 为了解决从原型对象生成实例的问题,JavaScript提供了一个构造函数(Constr...

  • JavaScript 面向对象 (2)

    JS 如何继承? 借用构造函数继承 : function SuperType(name){ ...

  • js的继承方式

    js的继承方式 一、原型链继承 原型继承的缺点: 二. 构造函数继承 构造函数继承的缺点: 三. 组合式继承 组合...

  • 浅析JS继承方法

    JS 实现继承的方法有:1.原型链继承2.构造函数继承3.组合继承(原型链继承 + 构造函数继承)4.原型式继承(...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

网友评论

      本文标题:js非构造函数继承

      本文链接:https://www.haomeiwen.com/subject/aybahctx.html