如果我有:
var obj={
a:function(){obj.b();},
b:function(){this.a();}
};
用“this”调用对象方法或直接引用对象本身有什么区别,因为它与方法在同一范围内?
如果我有:
var obj={
a:function(){obj.b();},
b:function(){this.a();}
};
用“this”调用对象方法或直接引用对象本身有什么区别,因为它与方法在同一范围内?
依靠
this
可以采取多种形式,使其不可预测:
在普通函数调用中,如funcName()
,this
是全局对象。在浏览器中,它是window
对象。
在函数使用“use strict”的普通函数调用中,this
是undefined
.
对于用作构造函数的函数,如var instance = new ConstructorFunction()
,this
将引用从该构造函数创建的实例对象。
对于对象字面量,this
是包含函数的直接对象字面量。
call(context,args...)
当由or调用时apply(context,[args...])
,this
不管context
是什么。
this
可以根据您调用函数的方式而改变:
var funnyB = obj.b;
funnyB(); //this is window
在您提供的对象文字上下文中,没有逻辑上的区别。this
关键字指向obj
变量,因为this
是对函数是属性/方法的对象的引用。