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

来源:互联网 发布:电脑视频监控软件 编辑:程序博客网 时间:2024/05/20 23:33

这几天在看廖雪峰老师的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


如侵删


0 0