我有一个脚本,可以从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是邪恶的?
我没有测试过这个,所以我不知道它是否会起作用
答案 0 :(得分: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`