JS -- call/apply

JS – call/apply

JS – call/apply

function f() {
    this.x = 333;               // // this 指向 window
}
f();
alert(x);
var obj = {x: 999, y: 888, f: function() {
    alert(this.x);
}};
obj.f();                        // 999

var obj2 = {x: 111};
obj2.f = obj.f;
obj2.f();                       // 111
function func() {
    alert(this.name);           // this 指向的是 window
}

var dog = { name: ‘a dog‘ };
dog.func();                     // 错误, dog 里面没有 func 方法

var name = ‘I am window‘;
func.call(dog);                 // 输出 a dog

// 输出 I am window
func.call();
func.call(window);
function f(val) {
    alert(this.name + ‘ val is ‘ + val);
}

function Dog(name) {
    this.name = name;
}
var d = new Dog(‘a dog‘);
f.call(d, ‘abc‘);
// d 作为参数进入 f 就变成了里面的 this, abc 作为参数 传入 f(val) 中

f.apply(d, Array(‘a dog‘));     // apply 和 call 类似, 不过他呼叫的是参数是数组, 对于需要 arguments 的时候游泳
时间: 2024-10-21 09:35:53

JS -- call/apply的相关文章

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()的区别

1.各自对应的不同的语法: 1 /*apply()方法*/ 2 function.apply(thisObj[, argArray]) 3 4 /*call()方法*/ 5 function.call(thisObj[, arg1[, arg2[, [,...argN]]]]); 2.各自不同的定义: call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个

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 call apply bind简单的理解

相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向.区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的. bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向. MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bi