1

私が何度も遭遇している問題の1つは、thisポインターの変更への参照です。以下の例を見てください。サーバーオブジェクトを作成し、カメラの解像度をプロパティとして保存したいと思います。this.resolutionサーバーオブジェクトではなくカメラコールバックオブジェクトのプロパティに適用されるため、これは不可能です。

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

この問題を解決するための最善の方法は何ですか?私の質問が曖昧な場合は、説明を求めてください。

4

1 に答える 1

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
于 2013-03-10T00:42:57.327 に答える