【问题标题】:jQuery: how to get original value of this in methodsjQuery:如何在方法中获取 this 的原始值
【发布时间】:2011-04-25 09:48:46
【问题描述】:

我正在尝试使用 JS 和 jQuery 进行一些面向对象的设计。 我有以下委托人:

function A () {
  this.url = "some url";

   $("rrr").autocomplete({
    source: function(req, add){
       $.getJSON(this.url, req, function(data) {} ...
}

如你所料,我不能使用 this.url,因为 jQuery 重新定义了 this。没有这个我不能只使用 url,因为它没有被声明。 我想出的是这样的东西:

function A () {
  this.url = "some url";
  var url = this.url;

   $("rrr").autocomplete({
    source: function(req, add){
       $.getJSON(url, req, function(data) {} ...
}

但这实在是太丑了,而且只适用于属性。

有没有更好的方法从 jquery 方法的原始范围中获取 this 的值?

【问题讨论】:

    标签: javascript jquery oop this


    【解决方案1】:

    问题在于“this”引用是对触发事件的对象的引用。在实例化时在类中保留对“this”的引用并不理想,但可以解决此问题(您可以随意称呼它,但通常我称之为“self”或“_this”)。

    function A () {
      var _this = this;
      _this.url = "some url";
    
    
       $("rrr").autocomplete({
        source: function(req, add){
           $.getJSON(_this.url, req, function(data) {} ...
    }
    

    【讨论】:

    • 是的,我希望有更漂亮的东西,但仍然有效。
    【解决方案2】:

    您可以在函数的上下文中使用$.proxy() 设置this,如下所示:

    function A () {
      this.url = "some url";
      $("rrr").autocomplete({
         source: $.proxy(function(req, add){
                   $.getJSON(this.url, req, function(data) {});
                 }, this)
      });
    }
    

    或者你可以通过返回一个带有上下文集的函数来完成它,但是由于你不喜欢你当前的解决方法,我猜$.proxy() 在你的情况下更有吸引力,and not really much overhead at all here .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多