解决“this”引用改变回调内部的问题?

时间:2013-03-10 00:14:21

标签: javascript node.js

我一次又一次遇到的问题之一是对this指针变化的引用。以下面的例子为例。我想创建一个Server对象,并将摄像头的分辨率存储为属性。这是不可能的,因为this.resolution适用于相机回调对象中的属性而不是Server对象。

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
}

过去,我通过暂时将this重命名为self以调用函数来解决此问题。当我存储值时,这不起作用。我需要将this传递给回调,这显然是我无法做到的。

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

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

1 个答案:

答案 0 :(得分: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