js继承的理解

今天再次看js继承,有了新的理解。其实是对作用域的进一步理解

 

首先看一个例子:

 

function A(name){
    this.name = name;
    this.sayHello = function(){alert(this.name+” say Hello!”);};
}

function B(name,id){
    this.temp = A;
    this.temp(name);        //相当于new A();

    delete this.temp;        //防止在以后通过temp引用覆盖超类A的属性和方法
     this.id = id;   
    this.checkId = function(ID){alert(this.id==ID)};
}

 

这是经典的对象冒充,标红的那两行相当于执行了A(name),并且执行后A中的this已经换成了B中的this。

 

那么我们把标红的部分直接换成 A(name)会怎样呢?

 

如此我们做试验

var b = new B("B","BID");

alert(b.name);//undefined

为何?

因为执行A的时候没有绑定作用域,this仍然是window

我们输出alert(window.name)或alert(name)//B

那么这中对象冒充实际上就是变换了this,绑定作用域到某个对象上

 

那么除了这个方法还有没有其他方法呢?

 

apply和call

个人理解的作用:调用函数并绑定作用域

这就是对象冒充的含义

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值