日期:2014-05-16  浏览次数:20304 次

javascript call的使用

?

Javascript中call的使用自己感觉蛮纠结的,根据文档很好理解,其实很难确定你是否真正的理解。

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

1.最基本的理解:示例1

自定义一个类,该类有一个方法showTxt,用来显示当前对象的name值。

创建一个对象,并且该对象的name值等于test1。

使用call方法,使新创建的对象obj添加Class1类的showTxt方法,即把Class1类中的this.showTxt中的this指定成obj,这样obj就有了showTxt方法。弹出"test1"。

?

function Class1() {
    this.showTxt = function() {
        alert(this.name)
    }
}
var obj = new Object();
obj.name = "test1"Class1.call(obj);
obj.showTxt(); //test1alert(obj.showTxt);//function(){alert(this.name)}

?

这个例子很容易理解。

2.再看一个稍微深入的理解

示例2:创建Class1的实例,让这个实例调用showTxt方法返回这个实例的name值,因为这个实现没有name值所以返回undefine.

function Class1() {
    this.showTxt = function() {
        alert(this.name)
    }
}
var class1 = new Class1();
class1.showTxt(); //undefinedalert(class1.showTxt);//function(){alert(this.name)}

?