关于call ,this,继承,记录一点自己的初步理解

这几天在看廖雪峰老师的js教程,在提到this的指向问题时,讲到了apply改变this指向的作用。

getAge.apply(xiaoming, []); // 25, getAge()里的this指向xiaoming, 参数为空

(以上摘自廖雪峰老师js教程-函数-方法篇)

后来又看了继承相关的内容,用到了call和apply,这两个函数只有一点不同,前者按顺序传递参数,后者参数必须为数组。

但当时没有完全理解,感觉像是call和apply的新用法?以getAge为例,为什么说xiaoming继承了getAge方法?

网上看了一些举例,这个感觉很不错:

function fun1() {

        this.a = 123;

        this.add = function () { return  this.a }

}

function fun2() {

         this.a = 456;

}

var f1=new fun1()

var f2=new fun2()

var a = f1.add.call(f2);  // a输出的是456

这里可以发现,f2这个对象使用了f1的add方法,从而return了f2里的a值,可以理解为,f2继承了f1的add方法。

用改变this指向的概念,则解释为:f1.add()里的this指向了f2,所以a值成为了456(如果没有改变this的指向,直接调用f1.add()会报错)

总之,本质是改变this的指向,在表面上我们称之继承,只是为了配合众多面向对象语言里的继承概念(所谓js不可出大流,不然没人愿意用啊)




但我还是想说,这tm对于初学者真够绕的,mmp!


参考资料:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345005399057070809cfaa347dfb7207900cfd116fb000

http://www.cnblogs.com/itstone/archive/2012/07/23/call.html


如侵删


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值