以下是一个创建和反对并调用回调的函数(不是确切的代码,但类似的东西)。
myObject = function(callback){
var tmpThis = this;
this.accounts = [];
tmpThis.accounts[0] = 1;
tmpThis.accounts[1] = 2;
callback();
}
function caller(){
var newMyObject = new myObject(function() {
alert(newMyObject.accounts[1]);
});
}
newMyObject
在回调函数中未定义。有没有办法可以访问它。我读过类似的问题,但没有一个能解释原因。
我可以通过将第二个参数中创建的对象传回回调函数来修复它。但我认为这是一种黑客而不是正确的方式。
答案 0 :(得分:0)
newMyObject
不知道传递给它的参数内部newMyObject
。它将是未定义的。
换句话说,当alert(newMyObject.accounts[1]);
运行时,newMyObject
定义的new myObject
将不存在。
newMyObject
执行时, callback();
将被取消定义,该语句运行以下代码:
function() {
alert(newMyObject.accounts[1]);
}
您的回调函数正在传递到myObject函数中。您可以在myObject函数中alert(accounts[1])
。
您尝试使用的模式通常不会进行函数回调。通常你会传递一个选项对象,用于自定义myObject
。
目前尚不清楚你要做什么。
答案 1 :(得分:0)
您可以使用this
在新创建对象的上下文中访问回调,并使用call
来调用回调。
myObject = function(callback){
var tmpThis = this;
this.accounts = [];
tmpThis.accounts[0] = 1;
tmpThis.accounts[1] = 2;
callback.call(this);
}
function caller(){
var newMyObject = new myObject(function() {
alert(this.accounts[1]);
});
}
答案 2 :(得分:0)
你可以试试这个:
function Application () {
var self = this;
myObject = function(callback){
var tmpThis = this;
this.accounts = [];
tmpThis.accounts[0] = 1;
tmpThis.accounts[1] = 2;
callback();
};
function caller(){
self.newMyObject = new myObject(function() {
alert(self.newMyObject.accounts[1]);
});
}
}
答案 3 :(得分:0)
电话尚未结束。将其设置为在下一个周期中运行:
http://fiddle.jshell.net/gWUD9/
myObject = function(callback){
var tmpThis = this;
tmpThis.accounts = [];
tmpThis.accounts[0] = 1;
tmpThis.accounts[1] = 2;
setTimeout(callback,1);
}
var newMyObject = new myObject(function() {
alert(newMyObject.accounts[0]);
});