apply 与 call 详细
栏目: JavaScript · 发布时间: 5年前
内容简介:只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用
apply 与 call 介绍
function f1(x, y) { console.log("结果是:" + (x + y) + this); } f1(10, 20); //函数的调用 // 结果是:30[object Window] // 此时的 f1 实际上是当作对象来使用的,对象可以调用方法 f1.apply(); // 结果是:NaN[object Window] f1.call(); // 结果是:NaN[object Window] f1.apply(null); // 结果是:NaN[object Window] f1.call(null); // 结果是:NaN[object Window]
-
apply
和call
方法中如果没有传入参数,或者传入的是null
,那么调用该方法的函数对象中的this
就是默认的window
-
apply
和call
都可以让函数或者方法来调用,传入参数和函数自己调用的写法不一样,但是效果是一样的。
f1.call(null,10,20); // 结果是:30[object Window] f1.apply(null,[10,20]); // 结果是:30[object Window]
- 基本使用
function f2(x, y ){ console.log("结果:"+(x+y)+" "+ this.age ); } window.f2(10, 20); //结果:30 undefined // obj是一个对象 var obj = { age: 10, sex: "男" }; window.f2.apply(obj,[10, 20]); //结果:30 10 window.f2.call(obj,10,20); //结果:30 10 console.dir(obj); // age: 10 sex: "男"
apply
与 call
的作用:改变 this
的指向
apply
和 call
可以改变 this
的指向
例子1:用于方法
function Person(age, sex){ this.age = age; this.sex = sex; } //通过原型添加方法 Person.prototype.sayHi=function(){ console.log("您好呀:"+this.sex); } var per = new Person(10,"男"); per.sayHi(); // 您好呀:男 function Student(name, sex){ this.name = name; this.sex = sex; } var stu=new Student("小明", "女"); per.sayHi.apply(stu); // 您好呀:女 per.sayHi.call(stu); // 您好呀:女 // stu 没有 sayHi(),但是通过apply或call可以让它调用per的sayHi().
例子2:用于函数
function f(x, y){ console.log("结果是:"+(x+y)+" "+this); return "此时的this是"+this; } // apply和call调用 var r1=f.apply(null,[1,2]); // 此时f中的this是window console.log(r1); //结果是:3 [object Window] // 此时的this是[object Window] var r2=f.call(null,1,2); // 此时f中的this是window console.log(r2); //结果是:3 [object Window] // 此时的this是[object Window] // 改变this的指向 var obj={ sex: "男" } // 本来f函数是window对象的,但是传入obj之后,f函数就是obj对象的 var r3=f.apply(obj,[1,2]); // 此时f中的this是obj console.log(r3); // 结果是:3 [object Object] // 此时的this是[object Object] var r4=f.call(obj,1,2); // 此时f中的this是obj console.log(r4); // 结果是:3 [object Object] // 此时的this是[object Object]
apply
和 call
的使用方法总结
apply
的使用方法:
函数名字.apply(对象,[参数1,参数2,...]); 方法名字.apply(对象,[参数1,参数2,...]);
call
的使用方法:
函数名字.call(对象,参数1,参数2,...); 方法名字.call(对象,参数1,参数2,...);
apply
与 call
的不同:
- 参数传递的方式是不一样的
使用场景
只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用 apply
或者是 call
的方法改变 this
的指向。
-
apply
和call
方法实际上并不在函数这个实例对象中,而是在Function
的prototye
中。
以上所述就是小编给大家介绍的《apply 与 call 详细》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
韦斯(Mark Allen Weiss) / 机械工业出版社 / 2010-8 / 45.00元
《数据结构与算法分析:C语言描述》曾被评为20世纪顶尖的30部计算机著作之一,作者在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评,已被世界500余所大学选作教材。 在《数据结构与算法分析:C语言描述》中,作者精炼并强化了他对算法和数据结构方面创新的处理方法。通过C程序的实现,着重阐述了抽象数据类型的概念,并对算法的效率、性能和运行时间进行了分析。 ......一起来看看 《数据结构与算法分析》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
XML、JSON 在线转换
在线XML、JSON转换工具