0

divからページにドラッグアンドドロップアップローダーを作成するスクリプトがあります。私のDIVは次のようになります

<div class="well uploader"
    data-type="image"
    data-callback="product.addimage"
    data-multi="1"></div>

次に、次のような関数を使用します

var product = new function(){
    /* Some random stuff */
    this.addimage = function(image){
        alert('W00T! I HAZ AN IMAGE!');
    }
    /* More random stuff */
}

アップロードが完了したら、で関数を呼び出す必要がありますdata-callback(この例ではproduct.addimage)。グローバル関数を使用すると実行できることはわかっていますがwindow[callback]()、オブジェクトの下の関数を使用してこれを実行する最善の方法がわかりません。

私の最初の考えは次のようなことをすることでした*

var obj = window;
var parts = callback.split('.');
for(part in parts){
    obj = obj[parts[part]];
}
obj();

しかし、それは少し汚いようです、evalは悪なので、evalを使用しないより良い方法はありますか?

私はこれをテストしていないので、それが機能するかどうかわかりません

4

1 に答える 1

1

ええ、それは機能しますが、次のようにコーディングします。

function followPropPath (obj, propPath) {
    var pathParts = propPath.split(".");
    for (var i = 0; i < pathParts.length; ++i) {
        obj = obj[pathParts[i]];
    }
    return obj;
}

var obj = { x: { y: { z: { f: function() { alert(this); } } } } };

followPropPath(obj, "x.y.z")["f"](); // `this` is `z`
followPropPath(obj, "x.y.z.f")(); // `this` is `window`
于 2012-06-01T16:39:41.820 に答える