有2个代码片断之间的区别吗?
由于foo
是的成员函数obj
, this
将涉及到obj
本身(方法调用图案)。
1。
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(obj.prop);
};
2。
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(this.prop);
};
应用程序我工作,不停地在我使用的方法2崩溃。
该代码是这样的:
obj = {};
obj.listener = {
eventprocess : function(param) {
//some code
}
};
obj.init = function() {
this.a = library_func();
this.a.add_listener(this.listener);
};
它工作时,我使用的方法1。
任何想法,为什么?
随着分辨率obj
与this
被延迟,直到该函数的执行,它的结果可能取决于是否改变this
或/和obj
已定义和调用之间改变。
例如,给定两个对象,其是相同的,除了一个使用this
,另一种使用obj
在函数foo
:
var objA = {};
objA.prop = "test";
objA.foo = function() {
alert(this.prop);
};
var objB = {};
objB.prop = "test";
objB.foo = function() {
alert(objB.prop);
};
......我们将在这里看到不同的行为:
var anotherObject = {
objAFoo: objA.foo,
objBFoo: objB.foo
};
anotherObject.objAFoo(); // "undefined";
anotherObject.objBFoo(); // "test";
http://jsfiddle.net/3D6xY/
请注意,您可以通过设置的价值规范这种行为this
使用call()
或apply()
在评论中指出:
anotherObject.objAFoo.call(objA); // "test";
http://jsfiddle.net/3D6xY/1/
然而,还指出,如果情况this
已经使用绑定bind()
或jQuery.proxy()
可以在这里伤害你。