2013-03-10 14 views
1

我一次又一次遇到的问题之一是对指针变化的参考this。以下面的例子。我想创建一个Server对象,并将相机的分辨率存储为属性。这是不可能的,因为this.resolution适用于相机回调对象中的属性而不是服务器对象。解决方案“this”引用更改内部回调?

function Server(options) { 
    this.settings = options.settings; 
    this.camera = options.camera; 

    // Grab camera resolution 
    this.camera.getImageResolution(function(err, data) { 
     this.resolution = data; 
    }); 
} 

Server.prototype.start = function() { 
    console.log(this.resolution); // This outputs an undefined variable error 
} 

在过去,我围绕着这一重命名thisself临时调用函数的工作。当我存储一个值时,这不起作用。我需要通过this进入回调,我显然不能这样做。

此外,我不能使用apply,因为这将不允许camera.getImageResolution调用自己的方法。

解决此问题的最佳途径是什么?如果我的问题含糊不清,请要求澄清。

+0

为什么你需要将'this'传入回调函数?如果你在外部范围声明'self',你仍然可以在回调中引用它。你也可以使用'bind'来创建一个特定接收者的回调。 – pdoherty926 2013-03-10 00:23:14

+0

@ethagnawl我需要将'this'传入回调函数,因为上面的代码是异步运行的。对不起,离开了。 – gluxon 2013-03-10 00:26:58

+0

没错,我可以在'getImageResolution'中访问'self',但是我怎样才能将'self'的值放回'this'? – gluxon 2013-03-10 00:34:52

回答

2
function Server(options) { 
    var self = this; 

    self.settings = options.settings; 
    self.camera = options.camera; 

    // Grab camera resolution 
    this.camera.getImageResolution(function(err, data) { 
     self.resolution = data; 
    }); 
} 

Server.prototype.start = function() { 
    return this.resolution; 
} 

var server = new Server({options: {...}, settings: {...}}); 
server.camera.getImageResolution(); 
// after getImageResolution's asynch method has completed 
server.start() // === data parameter from getImageResolution's asynch method callback 
+0

太好了,但是我怎么用另一种方法访问'self.resolution'呢? – gluxon 2013-03-10 00:45:14

+0

'return this.resolution'给出未定义。 “这个”永远不会被赋予“自我”的值。 – gluxon 2013-03-10 00:55:44

+1

您的代码必须存在其他一些问题。你会看到一个基于我的解决方案在这里工作的人为例子:http://jsfiddle.net/ZBfLt/1/ – pdoherty926 2013-03-10 01:01:20

相关问题