关于js中的组合继承

首先我们先看一个构造函数

	function Dad(){
	       this.name = '张三',
	       this.age = 16
	 }
	 Dad.prototype.like = function(){
        console.log('高尔夫')}

假如现在有一函数,想继承Dad的属性方法,可以以下做法

function Son(){
      Dad.call(this);
 }
 Son.prototype = Dad.prototype;

但是以上做法存在的问题是,prototype即使属性,也是对象。像上面这做法 Son.prototype=Dad.prototype,指的都是同一个指针,修改了其中某个都会影响另一个。所以会采取以下做法

	function Son(){
	       Dad.call(this);
	}
    let Link = function(){}
    Link.prototype = Dad.prototype;
    Son.prototype = new Link();
    Son.prototype.constructor = Son;

这个Link的作用相当于切断了Son 和 Dad的联系。new Link()是重新实例化一个新的对象,然后Son.prototype = 新的对象,不存在和Dad指同个指针,即不会影响到双方。
然后在prototype中有个默认属性constructor,每一个对象实例都可以通过 constrcutor 对象访问它的构造函数,若不修改,那Son指向的都会是Link.

Son.prototype.constructor = Son;

完成代码如下

	function Dad(){
	     this.name = '张三',
	     this.age = 16
	 }

    Dad.prototype.like = function(){
        console.log('高尔夫');
    }

    function Son(){
        Dad.call(this);
    }

    let Link = function(){}
    Link.prototype = Dad.prototype;
    Son.prototype = new Link();
    Son.prototype.constructor = Son;

    Son.prototype.like = function(){
        console.log('1111');
    }

    let drag = new Son();
    drag.like();

如若有讲或不对,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值