jQuery:如何在方法中获得这个的原始值

时间:2010-10-14 13:11:50

标签: javascript jquery oop this

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

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

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

正如您猜测的那样,我不能使用 this.url ,因为jQuery重新定义了这个。没有这个,我不能只使用url,因为它没有声明。 我想出的是这样的事情:

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

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

但这只是简单的丑陋,只适用于属性。

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

2 个答案:

答案 0 :(得分:2)

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

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

或者你可以通过返回一个设置了上下文的函数来做到这一点,但由于你不喜欢当前的解决方法,我猜你$.proxy()在你的情况下更有吸引力,{ {3}}

答案 1 :(得分:2)

问题在于'this'引用是对触发事件的对象的引用。在你的班级实例化时提及'this'并不是理想的,但会解决这个问题(你可以把它称为任何你想要的东西,但通常是'自我'或'_this'就是我所说的。)

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


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