“这个”,对象名称的区别(Difference between “this” and the obj

2019-08-06 03:55发布

有2个代码片断之间的区别吗?

由于foo是的成员函数objthis将涉及到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。

任何想法,为什么?

Answer 1:

随着分辨率objthis被延迟,直到该函数的执行,它的结果可能取决于是否改变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()可以在这里伤害你。



文章来源: Difference between “this” and the object name