Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从字符串调用对象下的函数_Javascript - Fatal编程技术网

Javascript 从字符串调用对象下的函数

Javascript 从字符串调用对象下的函数,javascript,Javascript,我有一个脚本,可以从一个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){

我有一个脚本,可以从一个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 */
}
上传完成后,我需要调用
数据回调
中的函数(在本例中为product.addimage)。我知道使用全局函数可以只执行
window[callback]()
,但我不确定使用对象下的函数执行此操作的最佳方法

我的第一个想法是*

var obj = window;
var parts = callback.split('.');
for(part in parts){
    obj = obj[parts[part]];
}
obj();
但这似乎有点脏,有没有更好的方法不使用eval,因为eval是邪恶的


我还没有测试过这个,所以我不知道它是否会工作

是的,它会工作,尽管我会这样编码:

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`
函数followPropPath(obj,propPath){
var pathParts=propPath.split(“.”);
对于(变量i=0;i
这是您想要的吗[link]它使用pass作为函数名string@shareef有点,但我不知道名称空间是
MyNameSpace
,这是字符串的一部分。因此,它需要能够在同一代码中调用'product.addimage'和'somethingelse.dosomething'