apply使用介绍_javascript技巧_脚本之家,call和appl
分类:pc28.am

简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别在于传参不同。 call;call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。 apply;apply第一个参数传对象,参数可以是数组或者arguments 对象。 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 复制代码 代码如下: function Person{ this.name = name; this.age=age; this.alertName = function; } this.alertAge = function; } } function webDever{ Person.call; this.sex=sex; this.alertSex = function; } } var test= new webDever; test.alertName();//愚人码头 test.alertAge();//28 test.alertSex();//男 这样 webDever类就继承Person类,Person.call 的 意思就是使用 Person构造函数在this对象下执行,那么 webDever就有了Person的所有属性和方法,test对象就能够直接调用Person的方法以及属性了; 09年的理解解非常粗浅,呵呵。 作用二、回调函数: call 和 apply在回调行数中也非常有用,很多时候我们在开发过程中需要对改变回调函数的执行上下文,最常用的比如ajax或者定时什么的,一般情况下,Ajax都是全局的,也就是window对象下的,来看这个例子: 复制代码 代码如下: function Album { this.id = id; this.name = title; this.owner_id = owner_id; }; Album.prototype.get_owner = function { var self = this; $.get('/owners/' this.owner_id, function { callback && callback.call; }; var album = new Album; album.get_owner { alert('The album' this.name ' belongs to ' owner); }); 这里 复制代码 代码如下: album.get_owner { alert('The album' this.name ' belongs to ' owner); }); 中的 this.name就能直接取到album对象中的name属性了。

JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别在于传参不同。

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

call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。

apply方法:
语法:fun.apply(thisArg[, argsArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisArg 任何一个参数,那么 Global 对象将被用作 thisArg, 并且无法被传递任何参数。

apply(obj,[arg1,arg2,arg3]);apply第一个参数传对象,参数可以是数组或者arguments 对象。

二、两者区别 两个方法基本区别在于传参不同
2.1、call方法:

这两个方法通常被用来类的继承和回调函数:

复制代码 代码如下:

作用一、类的继承:

function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' name '" with a negative price');
return this;
}

先来看这个例子:

function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
Food.prototype = new Product();

function Person(name,age){

function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
Toy.prototype = new Product();

this.name = name;

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

this.age=age;

2.2、apply方法:

this.alertName = function(){

复制代码 代码如下:

alert(this.name);

function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' name '" with a negative price');
return this;
}

}

function Food(name, price) {
Product.apply(this, arguments);
this.category = 'food';
}
Food.prototype = new Product();

this.alertAge = function(){

function Toy(name, price) {
Product.apply(this, arguments);
this.category = 'toy';
}
Toy.prototype = new Product();

alert(this.age);

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

}

三、作用实例

}

3.1、类的继承

function webDever(name,age,sex){

复制代码 代码如下:

Person.call(this,name,age);

function Person(name,age){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
}

this.sex=sex;

function webDever(name,age,sex){
Person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}

this.alertSex = function(){

var test= new webDever(“设计蜂巢”,24,”男”);
test.alertName();//设计蜂巢
test.alertAge();//24
test.alertSex();//男

alert(this.sex);

3.2、回调函数

}

复制代码 代码如下:

}

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);
});

var test= new webDever("愚人码头",28,"男");

call方法: 语法:fun.call(thisArg[, arg1[, arg2[, ...]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: c...

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或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简...

本文由pc28.am发布于pc28.am,转载请注明出处:apply使用介绍_javascript技巧_脚本之家,call和appl

上一篇:javascript插入样式实今世码_javascript才能_脚本之家 下一篇:没有了
猜你喜欢
热门排行
精彩图文