2009-07-23 3 views
4

現在のスコープ変数と関数をプレーンJavascriptまたはjQuery(フレームワークに固有の場合)の無名関数に渡す方法。例えば現在のスコープのjQuery/plainJS変数/関数を、現在のスコープから呼び出された無名関数に渡します。

jQuery.extend({ 
    someFunction: function(onSomeEvent) { 
    var variable = 'some text' 
    onSomeEvent.apply(this); // how to pass current scope variables/functions to this function? 
    return null; 

    _someMethod(arg) { 
     console.log(arg); 
    } 
    } 
}); 

上記の関数からFirebugのすべてでログインする必要があります

jQuery.someFunction(function(){ 
    console.log(this.variable); // or console.log(variable); 
    console.log(this._someMethod(1); // or jQuery.someFunction._someMethod(2); 
}); 

感謝を! 1行目の前に

答えて

3

読む:

var that = this; 

は次に4行目を変更します。

Javaスクリプトでは、関数内にスコープしかありません。 変数で関数内変数を指定した場合、この関数の外部からアクセスすることはできません。これは、JavaScriptでプライベート変数を作成する方法です。

この変数を使用できます。これは現在のオブジェクトを指しています(これはスコープではありません)。しかし! 新しいコマンドなしで機能を開始する場合、よりこのは外側スコープを指します(ほとんどの場合、ウィンドウオブジェクト=グローバルスコープです)。

例:

function foo(){ 
    var a = 10; 
} 
var f = foo(); //there is nothing in f 
var f = new foo(); //there is nothing in f 

function bar(){ 
    this.a = 10; 
} 
var b = new bar(); //b.a == 10 
var b = bar(); //b.a == undefined, but a in global scope 

はところで、適用方法Mozilla docs/apply のチェックアウト構文は、だから、見ることができ、その拳引数は、あなたのメソッドが呼び出されますこのになりますオブジェクトです。

したがって、この例を考えてみます。

function bar(){ 
    console.log(this.a); 
    console.log(this.innerMethod(10)); 
} 

function foo(){ 
    this.a = 10; 
    this.innerMethod = function(a){ 
    return a+10; 
    } 

    bar.apply(this); 
} 

var f = new foo(); // => you will get 10 and 20 in the console. 
var f = foo(); // => you will still get 10 and 20 in the console. But in this case, your "this" variable //will be just a global object (window) 

は、多分それは方法を適用する呼び出す前に

var that = this; 

を作るために、より良いですが、多分それは必要ありません。わからない

ので、これは間違いなく動作します:

function foo(){ 
    console.log(this.a); 
} 
jQuery.extend({ 
somefunc: function(func){ 
    this.a = 10; 
    func.apply(this); 
} 
}); 

$.somefunc(foo); //will print 10. 
0

: ":良い部品Javaスクリプト" で、たとえば、JavaScriptでスコープについて

onSomeEvent.apply(that); 
+0

そして、どのように関数や変数を呼び出すために? this.variableを使用していますか? –

+0

動作しません:http://gist.github.com/152649 –

+0

シンプル:(function(){var _this = this; var a = 2; console.log(_this.a);})();どのように別の変数、ハッシュから変数を取得するか、私は他に何がわからない... –

関連する問題