JS技术

深入了解Javascript_Javascript教程(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-01 14:22 我要评论( )

DaimaRen.cn 2009-2010 by Tomie Zhang var o= { method: function() { alert(this === o); //true } } o.method();在method被呼叫的时候,tihs指向了o,因为它是o下的一个方法,它的上下文是在o中的,而如果它不在o

DaimaRen.cn © 2009-2010 by Tomie Zhang
var o= {
    method: function() {
        alert(this === o);    //true
    }
}
o.method();在method被呼叫的时候,tihs指向了o,因为它是o下的一个方法,它的上下文是在o中的,而如果它不在o这个object中,那么它将会指向window:

DaimaRen.cn © 2009-2010 by Tomie Zhang
    function method() {
        alert(this === window);    //true
    }
o.method();OK,那接下来要知道call是干什么的,话说call是一个比较奇妙的方法,也很容易让人迷糊,官方的解释:

call 方法
请参阅
应用于:Function 对象
要求
版本 5.5
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

官方解释很容易让人迷糊,Nicholas大湿的解释如下:

The call() method executes a function as if it were a method of another object

那不如看个例子吧:

DaimaRen.cn © 2009-2010 by Tomie Zhang
function add(a,b)
{
    alert(a+b);
}
function sub(a,b)
{
    alert(a-b);
}
 
add.call(sub,3,1); //4这里其实就是用add的方法替换了sub的方法并且把参数值传进去,等同于

DaimaRen.cn © 2009-2010 by Tomie Zhang
add.call(sub,3,1) == add(3,1)好了,理解了this指针以及call,那回头看这个题目,那它其实就相当于:

DaimaRen.cn © 2009-2010 by Tomie Zhang
function a() {
    alert(this);
}
a(null);this不受任何影响指向的是a这个函数声明,而a这个函数声明则是一个object,于是结果就很明显啦。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评