Javascript 中的 call 和 apply使用介绍
更新时间:2012年02月22日 15:40:38 作者:
JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象
简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别在于传参不同。
call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。
apply(obj,[arg1,arg2,arg3]);apply第一个参数传对象,参数可以是数组或者arguments 对象。
这两个方法通常被用来类的继承和回调函数:
作用一、类的继承:
先来看这个例子:
function Person(name,age){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
}
function webDever(name,age,sex){
Person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}
var test= new webDever("愚人码头",28,"男");
test.alertName();//愚人码头
test.alertAge();//28
test.alertSex();//男
这样 webDever类就继承Person类,Person.call(this,name,age) 的 意思就是使用 Person构造函数(也是函数)在this对象下执行,那么 webDever就有了Person的所有属性和方法,test对象就能够直接调用Person的方法以及属性了; 09年的理解解非常粗浅,呵呵。
作用二、回调函数:
call 和 apply在回调行数中也非常有用,很多时候我们在开发过程中需要对改变回调函数的执行上下文,最常用的比如ajax或者定时什么的,一般情况下,Ajax都是全局的,也就是window对象下的,来看这个例子:
function Album(id, title, owner_id) {
this.id = id;
this.name = title;
this.owner_id = owner_id;
};
Album.prototype.get_owner = function (callback) {
var self = this;
$.get('/owners/' + this.owner_id, function (data) {
callback && callback.call(self, data.name);
});
};
var album = new Album(1, '生活', 2);
album.get_owner(function (owner) {
alert('The album' + this.name + ' belongs to ' + owner);
});
这里
album.get_owner(function (owner) {
alert('The album' + this.name + ' belongs to ' + owner);
});
中的 this.name就能直接取到album对象中的name属性了。
call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。
apply(obj,[arg1,arg2,arg3]);apply第一个参数传对象,参数可以是数组或者arguments 对象。
这两个方法通常被用来类的继承和回调函数:
作用一、类的继承:
先来看这个例子:
复制代码 代码如下:
function Person(name,age){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
}
function webDever(name,age,sex){
Person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}
var test= new webDever("愚人码头",28,"男");
test.alertName();//愚人码头
test.alertAge();//28
test.alertSex();//男
这样 webDever类就继承Person类,Person.call(this,name,age) 的 意思就是使用 Person构造函数(也是函数)在this对象下执行,那么 webDever就有了Person的所有属性和方法,test对象就能够直接调用Person的方法以及属性了; 09年的理解解非常粗浅,呵呵。
作用二、回调函数:
call 和 apply在回调行数中也非常有用,很多时候我们在开发过程中需要对改变回调函数的执行上下文,最常用的比如ajax或者定时什么的,一般情况下,Ajax都是全局的,也就是window对象下的,来看这个例子:
复制代码 代码如下:
function Album(id, title, owner_id) {
this.id = id;
this.name = title;
this.owner_id = owner_id;
};
Album.prototype.get_owner = function (callback) {
var self = this;
$.get('/owners/' + this.owner_id, function (data) {
callback && callback.call(self, data.name);
});
};
var album = new Album(1, '生活', 2);
album.get_owner(function (owner) {
alert('The album' + this.name + ' belongs to ' + owner);
});
这里
复制代码 代码如下:
album.get_owner(function (owner) {
alert('The album' + this.name + ' belongs to ' + owner);
});
中的 this.name就能直接取到album对象中的name属性了。
您可能感兴趣的文章:
- 小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
- Javascript - 全面理解 caller,callee,call,apply
- JS类库Bindows1.3中的内存释放方式分析
- 理解Javascript的caller,callee,call,apply区别
- javascript call和apply方法
- js apply/call/caller/callee/bind使用方法与区别分析
- javascript下arguments,caller,callee,call,apply示例及理解
- JavaScript 学习笔记(九)call和apply方法
- JavaScript中apply与call的用法意义及区别说明
- 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
- JavaScript学习点滴 call、apply的区别
- js bind 函数 使用闭包保存执行上下文
- JavaScript中的apply()方法和call()方法使用介绍
- js设置组合快捷键/tabindex功能的方法
- javascript中apply和call方法的作用及区别说明
- JavaScript中的apply和call函数详解
- ANGULARJS中用NG-BIND指令实现单向绑定的例子
- javascript中call,apply,bind的用法对比分析
- 浅谈javascript中call()、apply()、bind()的用法
- 开启Javascript中apply、call、bind的用法之旅模式
最新评论