Во-первых, указанный вами код не может быть вызван myFunc.myMethod
, так как значение функции не имеет свойства myMethod
. Вместо этого функция возвращает объект с этим свойством. Поэтому для начала вам необходимо:
var myValue = myFunc('http://foo.com').myMethod();
Однако это только вызовет метод, который устанавливает обратный вызов. Чтобы действительно иметь доступ к aValueAsynchronously
, вы можете создать замыкание вокруг этого значения:
var myFunc = function(url){
var aValueAsynchronously;
return {
val : aValueAsynchronously,
myMethod: function(){
var callback = function(evt){
aValueAsynchronously = ...;
};
...register your callback...
}
};
};
var obj = myFunc('http://foo.com');
obj.myMethod();
...some time passes, and eventually the callback occurs...
console.log( obj.val ); // This will be what was set in your callback
Вместо этого я лично написал бы код, чтобы я мог передать свой собственный обратный вызов для выполнения из обратного вызова iframe и просто передать специальное значение моему обратному вызову напрямую. (Это звучит странно; см. Код ниже.) Таким образом, вам не нужно ждать, пока значение станет доступным, скорее вы получите уведомление, когда оно будет:
var myFunc = function(url,whenDone){
return {
myMethod: function(){
var callback = function(evt){
var aValueAsynchronously = ...;
whenDone(aValueAsynchronously);
};
...register your callback...
}
};
};
var myObj = myFunc('http://foo.com',function(specialValue){
// use specialValue here
});
myObj.myMethod(); // Go