2

如果我有:

var obj={
    a:function(){obj.b();},
    b:function(){this.a();}
};

用“this”调用对象方法或直接引用对象本身有什么区别,因为它与方法在同一范围内?

4

3 回答 3

3

依靠

this可以采取多种形式,使其不可预测:

  • 在普通函数调用中,如funcName()this是全局对象。在浏览器中,它是window对象。

  • 在函数使用“use strict”的普通函数调用中,thisundefined.

  • 对于用作构造函数的函数,如var instance = new ConstructorFunction()this将引用从该构造函数创建的实例对象。

  • 对于对象字面量,this是包含函数的直接对象字面量。

  • call(context,args...)当由or调用时apply(context,[args...])this不管context是什么。

于 2012-05-07T15:35:59.443 回答
2

this可以根据您调用函数的方式而改变:

var funnyB = obj.b;
funnyB();  //this is window
于 2012-05-07T15:36:04.223 回答
0

在您提供的对象文字上下文中,没有逻辑上的区别。this关键字指向obj变量,因为this是对函数是属性/方法的对象的引用。

于 2012-05-07T17:24:23.260 回答