2

C ++とJavaから来て、私はJavascriptの初心者です。このコードパターンは私を混乱させます(jQueryアプリケーションにあります):

var opts = { drop : empty};

function drop(arg){
    opts.drop(arg);
    //do something
}

これをどのように読むか:オブジェクトoptsが作成され、属性dropが宣言されますが、空として初期化されます。次に、function(-object)dropが定義されます。2行目では、optsオブジェクトのdrop属性がメソッドとして呼び出されています。しかし、私の理解でopts.dropは、空です。したがって、呼び出し可能であってはなりません。

ここでは何が起きるのですか?重要なコードが欠落しているのでしょうか、それともこれは意味のあるパターンですか?

編集:ソース:https ://github.com/weixiyen/jquery-filedrop/blob/master/jquery.filedrop.js

4

2 に答える 2

5

empty関数の名前である可能性が高く、次のように実装されます。

function empty () {}

、、文字列、オブジェクトnullundefined配列などの場合... ...それでは、終了が不十分になるため、心配する必要があります。

しかし、私の腸は、あなたがその定義を探すなら、empty === function () {}

さらに混乱させるために、emptyが割り当てとして定義されている場合:

var empty = function () {};

その割り当ては、で参照されている場所より上で行う必要がありoptsます。

ただし、それが宣言である場合:

function empty () {}

関数宣言はスクリプト内の他の何よりも先にコンパイルされるため、その関数はスクリプトの下部を含むどこでも宣言できます。

編集

簡単に確認すると、emptyさまざまなスコープでいくつかのさまざまな関数が表示されています。配列からコールバックを削除するもの(配列を空に設定することによる)、親からHTML要素を削除するもの、要素に子要素があるかどうかをチェックするものがあります。

もちろん、私はこのサイトから縮小されたソースを表示しているので、そこにはもっと多くのempty機能があるかもしれません。

于 2012-09-29T01:05:12.733 に答える
1

これを見ると、空は単なる変数ではないと結論付けることができます。

opts.drop(arg);

ここで、ドロップは実際に引数を渡されているので、

emptyは、1つの引数を取る関数です。

したがって、var opts = { drop : empty}; //は他に何もありません

var opts = { drop : function(argument) {} };
于 2012-09-29T01:08:25.947 に答える