这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文主要介绍 js 中 call 与 apply 关键字的作用以及它们的用法, 具体实例如下, 希望对大家有所帮助
javascript call 与 apply 关键字的作用
apply 接受两个参数。第一个参数指定函数体内 this 对象的指向,第二个参数为一个带下标的集合。
call 则是 apply 的语法糖,如果参数数量固定,则可以不用带下标的集合传第二个参数。
- var func = function(a,b,c)
- {
- alert(a + b + c);
- }
- func.apply(null,[1,2,3]);//弹出6
- func.call(null,1,2,3);//弹出6
当 apply 与 call 传入的第一个参数为 null 时,函数体内的 this 会指向 window。
当 apply 与 call 传入的第一个参数为 null 时,函数体内的 this 会指向 window。
call 与 apply 的用途
1、改变 this 的指向
- var obj1 = {
- name = '刘备'
- }
- var obj2 = {
- name = '曹操'
- }
- var getName = function() {
- alert(this.name);
- }
- window.name = '三国';
- getName(); //弹出"三国"
- getName.call(obj1); //弹出"刘备"
- getName.call(obj2); //弹出"曹操"
所以,当在一些情况下 this 被莫名改变指向之后,可以使用 call 或 apply 来进行修正 this 的指向。
- document.getElementById('div1').onclick = function(){
- alert(this.id);//div1
- var fun1 = function(){
- alert(this.id);//window.id 即undefined
- }
- fun1();//普通函数的方式调用,this指代window,相当于window.id 即 undefined
- }
由于是普通函数的方式调用,所以上面的例子中,this 已经变成了 window。下面看看如何使用 call 进行修正。
- document.getElementById('div1').onclick = function(){
- alert(this.id);
- var fun1 = function(){
- alert(this.id);
- }
- fun1.call(this);//强制函数内的this为外层的this,
- }
2、调用其他对象的函数
示例 1:
- var obj1 = {
- a:1,
- b:2,
- add:function()
- {
- return this.a + this.b;
- }
- }
- var obj2 = {
- a:1,
- b:2,
- }
- var result = obj1.add.call(obj2);//用obj1的函数来计算obj2的两个属性的和
- alert(result);//输出3
示例 2:借用构造函数实现类似继承的效果
- var A = function(name)
- {
- this.name = name;
- };
- var B = function(){
- A.apply(this,arguments)
- }
- B.prototype.getName = function(){
- return this.name;
- }
- var b = new B('刘备');
- alert(b.getName());
以上就是本文的内容,有问题可以和小编联系,谢谢对 phperz 的支持!
来源: http://www.phperz.com/article/17/0523/330334.html