这个关键字在javascript中表现得很奇怪

时间:2014-04-10 14:00:10

标签: javascript

嘿,伙计们是javascript的新手,我真的很困惑使用关键字"这个"在javascript。

代码是

 function TestObject() {
        TestObject.prototype.firstMethod = function(){
                  this.callback();
                  YAHOO.util.Connect.asyncRequest(method, uri, callBack);

        }

        TestObject.prototype.callBack = function(o){

          this.secondMethod();
        }
        TestObject.prototype.secondMethod = function() {
         alert('test');
        }

我知道这指的是全局对象..在这里我只需要知道这里有什么...这里的行为与testobject相同吗?如果没有请解释我。

任何帮助将不胜感激..谢谢

2 个答案:

答案 0 :(得分:0)

javascript中的范围是一种痛苦,如果你来自纯粹的oo语言,它指的是实例/类。

在javascript中它是不同的,你必须将上下文传递给你的回调,以确保你将保留在你的实例/类范围内,如果使用jquery你可以这样做:

remplace:

YAHOO.util.Connect.asyncRequest(method, uri, callBack);

通过

YAHOO.util.Connect.asyncRequest( method, uri, jQuery.proxy(this.callBack, this) );

无法解释我在工作中的更多信息,但您可以在那里找到信息: 更多信息:

bind vs jquery proxy

Understanding scope

答案 1 :(得分:0)

您需要为我们提供更多代码,以便能够查看this值的来源,特别是因为this是对函数调用上下文的引用,所以如果您不显示我们在你调用这些功能的地方,我们将无法告诉你你会得到什么。以下是this的解释:

这是指函数的执行上下文,它可以采用4种类型的值,具体取决于您调用函数的方式。

全局调用:该函数作为全局函数调用

function global () {
  return this; 
}

global(); // Global object

方法调用:该函数作为对象的方法调用

myobject.method = function () {
  return this;
}

myobject.method(); // returns myobject

通过new运算符调用构造函数:该函数作为构造函数调用,其值为构造对象beign,将由构造函数funciton自动创建和返回的对象。这仅在使用new运算符调用函数时应用,并且它不是在Javascript中创建对象的唯一方法。

function Constructor () {
  this.bla = true;
}

new Constructor(); // returns a new object, which has a property "bla" with the value true

使用调用和应用函数方法:调用和应用允许您设置将被调用的函数的this值。

myobject = {
  bla = true,
  method = function () {
    return this;
  }
};

function setMe () {
  return this;
}

setMe.call(myobject); // returns myobject
myobject.method.apply(window); // returns window, the global object