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 回答