您的位置:首页 > 移动开发

javascript中的call()和apply()方法 - 原创实例

2013-04-01 12:46 609 查看
1、方法定义

call方法:
语法:call([thisObj,arg1, arg2,arg……n]) ,参数arg只能为列表的形式,如:a,b,c
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

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


2、常用实例


function User(name,age){//定义一个User方法
this.name = function () { alert(name) }; ;
this.age = function () { alert(age) };
}

function CallUser(name, age) {//为CallUser方法,添加成员
User.call(this, name, age); //如果用apply则为:User.apply(this, [name, age]);
//User.call指来添加到this的对象,this指当前对象,当然这里的this也可以换成其它对象。后面的name,age分别指User函数的实参。
//这里的call相当于CallUser.protype=new User();
}

var us = new CallUser("Sn", 20); //实参"Sn",20传给CallUser函数。CallUser的name,age再传给User函数
us.name();//Sn
us.age();//20


3、apply与protype结合使用

var Class = {                                    //创建Class对象(字面量)
app: function () {                      //创建一个名为app类(Function)
return function() {
this.init.apply(this, arguments); //当前this为function,继承于init属性,参数为arguments
}
}
}

var pro = Class.app();                      // 创建一个名为pro类,些类被Class.app()赋值,(Function)
pro.prototype = {
init: function (arget) {                // 定义pro类下的一个成员init,此成员用于实现Class类的init
this.arget = arget;
},
fn:function(){
alert(this.arget);
}
}

var obj = new pro("apply与protype结合使用");
obj.fn(); //结果:apply与protype结合使用


附件下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: