Javascript jquery从父级引用此

Javascript jquery从父级引用此,javascript,jquery,Javascript,Jquery,谷歌在试图找到这个问题的答案时毫无帮助!:( 如何从jQuery函数中正确引用父对象的this.color,如下所示: var obj = { colour: 'blue', do: function() { $.getJSON('getcolour.php', function(resp) { if (resp.colour == this.colour) { //<== this.colour doesnt = blue //match } });

谷歌在试图找到这个问题的答案时毫无帮助!:(

如何从jQuery函数中正确引用父对象的
this.color
,如下所示:

var obj = {
 colour: 'blue',
 do: function() {
  $.getJSON('getcolour.php', function(resp) {
    if (resp.colour == this.colour) { //<== this.colour doesnt = blue
     //match
    }
  });
 }
}
var obj={
颜色:“蓝色”,
do:函数(){
$.getJSON('getcolor.php',函数(resp){

如果(resp.color==this.color){/您需要在调用
$.getJSON
之外获取对
this
的引用:

do: function() {
    var self = this;
    $.getJSON('getcolour.php', function(resp) {
        if (resp.colour === self.colour) {  // use "self"
            // ...
        }
    });
}
或者,在ES5浏览器上,使用
.bind
将内部回调的上下文设置为
this

do: function() {
    $.getJSON('getcolour.php', function(resp) {
        if (resp.colour === this.colour) {
            // ...
        }
    }).bind(this);  // set the callback's context
}

jQuery的
$.proxy()
函数也可以在早期的浏览器上使用,以实现相同的效果。

这里有两个选项:

1) 使用临时变量存储对象的引用:

do: function() {
  var self = this;
  $.getJSON('getcolour.php', function(resp) {
    if (resp.colour == self.colour) { ... }
  });
};
如果选择这种方式,则既有“local
this
(作为getJSON处理程序上下文对象)又有“object
this
”很容易在处理程序中使用。但是,当然,您必须定义该临时变量。
self
是为此目的通常选择的最常见名称之一,但它实际上可以是任何可用的标识符-只要它不与其他变量的名称重叠)

2) 使用针对以下内容的功能:


使用这种方法,您已经替换了处理程序的上下文对象-它现在指向
this
(作为定义
do
函数的对象).

您试图引用的
this
被引用
getJSON
回调中上下文的
this
隐藏。请使用其他变量名

do: function() {
    var self = this;
    $.getJSON('getcolour.php', function(resp) {
        if (resp.colour == self.colour) { //<== this.colour doesnt = blue
         //match
        }
    });
}
do:function(){
var self=这个;
$.getJSON('getcolor.php',函数(resp){

如果(resp.color==self.color){/试试下面的代码,我认为在您的代码中这个指的是ajax范围

var obj = {
 colour: 'blue',
 do: function() {
  var myObj=this;
  $.getJSON('getcolour.php', function(resp) {
   if (resp.colour == myObj.colour) { //<== this.colour doesnt = blue
 //match
}
 });
}
}
var obj={
颜色:“蓝色”,
do:函数(){
var myObj=此;
$.getJSON('getcolor.php',函数(resp){

如果(resp.color==myObj.color){//非常好。干杯!(必须等待7分钟才能接受答案)只需使用
obj.color
。。。
var obj = {
 colour: 'blue',
 do: function() {
  var myObj=this;
  $.getJSON('getcolour.php', function(resp) {
   if (resp.colour == myObj.colour) { //<== this.colour doesnt = blue
 //match
}
 });
}
}