「javascript」es3继承问题

当需要继承一个原型方法,又不需要用到A构造函数内的属性时
如果使用B.prototype = A.prototype 会相当于引用同一个地址
如果修改B.prototype 会引起A.prototype 一起改变

使用一个缓冲构造器,赋予目标原型实例
/**
 * 继承 prototype 不会继承构造器内容 && 只继承原型方法,不使用同一引用
 *
 * @param {Target, Origin} 目标,  继承自
 */
const inherit = (function () {
  return function (Target, Origin) {
    function Buffer() {}
    Buffer.prototype = Origin.prototype;
    let buffer = new Buffer();
    Target.prototype = buffer;
    Target.prototype.constructor = Target;
    Target.prototype.super_class = Origin;
  };
})();

function A(opt) {
  this.name = opt.name;
}
A.prototype.log = function () {
  console.log(`这是log!`);
};

function B() {}

inherit(B, A);

let b = new B();
console.log(b)

结果

补充几个关于原型的语句

hasownproperty

检测是否为对象自身的属性(区分原型属性)

in

检测属性是否存在对象上(不区分原型属性)

instanceof

检测实例原型链上是否包含构造函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容