1

アプリ内:

var bootstrap = new Bootstrap();
bootstrap.init( this, this.onBootstrapComplete );

ブートストラップで:

this.init = function( app, completeHandler ){
    _app = app;
    _completeHandler = completeHandler;
        ...
}

...

var _allReady = function(){
        _completeHandler( _app );
}

アプリに戻る:

this.onBootstrapComplete = function( app )
{
        app.something();
        app.someValue = ...
}

このコンテキストをonBootstrapComplete内に取得したかったのです。それは動作しますが、正しく見えません:)

アプリから直接onBootstrapCompleteを呼び出したい場合は、this .onBootstrapComplete(this)と呼ぶ必要があります。

onBootstrapCompleteが次のようになるようにするにはどうすればよいですか?

this.onBootstrapComplete = function()
{
        this.something();
        this.someValue = ...
}
4

2 に答える 2

5

underscore.jsの使用をお勧めします。詳細については、http: //underscorejs.org/#bindを参照してください。

this.onBootstrapComplete = _.bind( function() {
   ...
   this.someFunction(); // this context is available now
   ... 
}, this );
于 2013-01-27T11:25:05.037 に答える
1

this関数が呼び出されたときに評価されます。this関数内で使用するとしますf

呼び出す方法は基本的に2つありますf

(expr).f()fがオブジェクトのプロパティとして呼び出された場合、thisはそのオブジェクトに評価されますexpr
f()この場合、thisはに評価されwindowます。

関数をに渡すので、関数をbootstrap呼び出すことができるのは。としてのみf()です。

クロージャーを使用できます。

var self = this;
this.onBootstrapComplete = function()
{
        self.something();
        self.someValue = ...
}

f.apply()または、関数を適切に使用することもできます。

function bind(context, f){
    return function() {
        return f.apply(context, arguments);
    }
}

this.onBootstrapComplete = bind(this, function()
{
        this.something();
        this.someValue = ...
});

または、ECMAScript 5には、すでにバインド関数[MDN]があります。

this.onBootstrapComplete = function()
{
        this.something();
        this.someValue = ...
}.bind(this);
于 2013-01-27T11:49:51.427 に答える