JavaScript でコールバックを宣言するたびにオブジェクトのスコープを手動で設定しなければならないのはイライラしますが、これは現実です。[mycallback].apply をコールバックとして渡し、スコープ オブジェクトを引数として渡して、次のようにできるかどうか疑問に思いました。
var f = function() { console.log(this.x); };
var o = {x: 3};
setTimeout(f.apply, 1000, o);
私が知る限り、これはスコープとして o で f を呼び出す必要がありますが、代わりに Chrome は「Uncaught TypeError: Function.prototype.apply が [object DOMWindow] で呼び出されました。これはオブジェクトであり、関数ではありません」と表示されます。なぜこれが機能しないのですか?