Js 中apply 与 call

最近看JS 总是遇到 对象的替换,不是很了解 JS中call 与apply的用法,在这里 轻轻瞄一下,只是自己理解下其用法:

apply  定义:应用某一对象的一个方法,用另一个对象替换当前对象。 apply([thisObj[,argArray]])

call   定义:调用一个对象的一个方法,以另一个对象替换当前对象。 call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

  从上面可以看出 其实他们的用法几乎一样,唯一的区别就是,调用时,apply传入的参数形式是数组的形式,而call则没有这个需求;也就是

当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去;

具体的用法,用一个实例来看一下,如下:

 

function cat()
{
}
cat.prototype={
    food:"fish",
    say: function(){
        alert("I love "+this.food);
    }
}
  var blackCat = new cat;
  blackCat.say();
  var dog={food:"bone"};
  blackCat.say.call(dog);

输出的效果如下图所示:

从上面就可以看出:

以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

我们有一个对象dog= {food:"bone"},我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

有一种OOP中继承的思想在里面。

    以上只是在网上看到大神们的讲解,比较容易理解的text,以此成文,在此和大家共勉,希望大家提供more 的理解。。。。。。

时间: 2024-08-29 17:51:37

Js 中apply 与 call的相关文章

JS中apply()与call()的含义与区别

JavaScript中,apply()与call()的含义一样,均为改变调用函数中的this指向.其中apply()与call()的第一个参数表示所要指向的对象,若调用函数无参数可不写,则默认为window.第一个参数后的参数表示调用函数的参数,其中apply()第一个参数后面的参数为一个数组,call()第一个参数后面为0或多个参数. 例: 1 window.x = 100; 2 3 4 var obj = {}; 5 obj.x = 1; 6 obj.test = function(a) {

js中apply方法的使用

1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: 1 Object.extend = function(destination, source) { 2 for (property in source) { 3 destination[property] = source[property]; 4 } 5 return destination; 6 } 除此之外,还有种方法,就是:Function.apply(当然使用Function.call

js中apply使用方法小议(转)

之一------(函数的劫持与对象的复制)关于对象的继承,一般的做法是用复制法: Object.extend 见protpotype.js 的实现方法: Object.extend = function(destination, source) ...{    for (property in source) ...{      destination[property] = source[property];    }    return destination;  } 除此以外,还有一种不太

JS 中apply()与call()

call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某

js中apply详解

学习http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destinatio

对于Angular JS中$apply()的理解

最近在学angularjs知识,在网上找到这篇文章,来自于:http://my.oschina.net/u/1402334/blog/500683,解决了我目前面临的一些问题,感觉收获很大,特此转过来做个记录: Angular最引人注目的特性就是双向绑定,然而它是怎么做到的,我可以来总结两点: 将变化的数据从model传向view-->$apply 将变化的数据从view传向model-->$watch 这连个函数都是基于scope的基础上,对scope对象的成员变化状况进行传播的.那么,我不

angular js 中$apply()的使用

angular js的双向数据绑定,在开发中起到的作用灰常大,但是,并不是所有时候都能起作用. 找了下资料发现,双向数据绑定其实也就是当模型发生了变化的时候,重绘了DOM,使你看到数据被更新了,引发模型变化的情况有: 1,dom事件: 2,xhr响应触发回调: 3,浏览器的地址变化: 4,计时器触发回调: 以上的某一个情况发生,都会触发模型监控机制,同时调用了$apply方法,重绘了dom;通常情况下,我们使用的一些指令或服务,如$http,$timeout,$location等都会调用$app

js中apply使用方法小议

关于对象的继承,一般的做法是用复制法: Object.extend 见protpotype.js 的实现方法: Object.extend = function(destination, source) ...{    for (property in source) ...{      destination[property] = source[property];    }    return destination;  } 除此以外,还有一种不太常见的方法:  Function.appl

关于JS中apply方法的基本理解

最近研究OpenLayers源码时,发现其中使用了比较多的apply方法,对其也是很不明白.于是上网经过多方面了解以及自己细细体会后,终于算是基本明白是其干什么的了,这里分享下.apply方法的造型是这样的,Function.apply(obj,args) 能接收两个参数:obj:这个对象将代替Function类里this对象args:这个是数组,它将作为参数传递.按网上大牛的解释是apply:劫持另外一个对象(a)的方法,继承a的属性.为了进一步理解,我自己做了下小例子,如下: (functi