使用原型在javascript中维护此指针

时间:2011-06-12 09:35:57

标签: javascript events prototypejs this

我遇到使用原型observe函数并获得对此指针的访问权限的问题。请考虑以下事项:

var Demo = Class.create({
    this.someValue = "this is the value",

    initialize: function() {
        Event.observe("button1", "click", function() {
            alert(this.someValue);
        });

        Event.observe("button2", "click", this.testFunc());
    },

    testFunc: function() {
        alert(this.someValue);
    }
});

单击button1button2控件并不执行我想要的警报显示“这是值”,而是显示事件的来源(即, 按钮)。所以我的问题是我如何能够实现我所追求的并使该指针等于Demo类。

2 个答案:

答案 0 :(得分:2)

this引用所需对象的范围内,将其分配给变量(例如self),然后引用不再this的范围中的变量指期望的对象。例如:

 /**
  * @constructor
  */
 var Demo = function(){};

 /**
  * Some value
  * @type {string}
  */
 Demo.prototype.someValue = "this is the value";

 /**
  * Initializes the demo.
  */
  Demo.prototype.initialize = function() {
     var self = this;
     Event.observe("button1", "click", function() {
        alert(self.someValue);
     });
     Event.observe("button2", "click", self.testFunc());
  };

  /**
   * Prints the value
   */
  Demo.prototype.testFunc = function() {
     alert(this.someValue);
  };

答案 1 :(得分:2)

来自manual

  

原型的绑定功能来拯救。使用bind(),您可以确保您的方法获得正确的this

在你的例子中:

var Demo = Class.create({

    initialize: function() {
        this.someValue = "this is the value";

        Event.observe("button1", "click", (function() {
            alert(this.someValue);
        }).bind(this));

        Event.observe("button2", "click", this.testFunc.bind(this));
    },

    testFunc: function() {
        alert(this.someValue);
    }
});