我正在尝试使用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 的值?
答案 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) {} ...
}