2010-07-06 5 views
4

У меня есть следующий JavaScript Object, несколько псевдокод:Javascript Вложенных функции Область

{ 
    dateField: new Date(), 
    addMinutes:function(numMinutes) 
    { 
    CallWebService(numMinutes, function{alert(this.dateField; }); 
    } 
} 

Проблема является областью функции обратного вызова в CallWebService не видит свойство DateField объекта. Есть ли способ получить к нему доступ? Благодаря!

ответ

8

Вы должны сохранить контекст (значение this) функции addMinutes.

Есть несколько способов добиться этого, самый простой из них является просто сохранить ссылку на this на переменную, эта переменная будет доступна в рамках функции обратного вызова, например:

var obj = { 
    dateField: new Date(), 
    addMinutes: function(numMinutes) { 
    var instance = this; 
    CallWebService(numMinutes, function() { 
     alert(instance.dateField); 
    }); 
    } 
}; 
+0

Точно, что мне нужно. Благодаря! – extnoob

0

Проблема заключается в том, что обратный вызов, скорее всего, устанавливает область функции обратного вызова, если вы используете применение или вызов, вы можете заставить область. Вы можете сделать это с чем-то вроде этого:

{ 
    dateField: new Date(), 
    addMinutes: function (numMinutes) { 
     var self = this; 
     var success = function() { 
      alert(this.dateField;); 
     }; 
     CallWebService(numMinutes, function() { success.apply(self); }); 
    } 
} 
0

Вы можете получить доступ к любому свойству (т.е. переменной или функции) объекта внутри этой области объекта, используя оператор точки (.). Таким образом, вы можете использовать, как это:

 
var obj = { 
    dateField: new Date(), 
    addMinutes: function(numMinutes) { 
    callWebService(numMinutes, function() { 
     alert(obj.dateField); 
    }); 
    } 
} 

Здесь переменная «DateField» объекта «Obj» доступна внутри этого объекта сферы с помощью оператора точки, как «obj.dateField». Я думаю, что это поможет вам решить вашу проблему, сообщите мне, если вы не поняли код, показанный выше.

Смежные вопросы