繁体   English   中英

Javascript:当名称存储在变量中时,如何在对象中创建函数

[英]Javascript: How to create a function in an object when the name is stored in a variable

我需要从存储在变量中的名称创建函数。 通常这很简单,在使用之前,我已经完成了:

  var funcName = "theName";
  window[funcName] = function(){
    // code here
  };

但是,在我的新用例中,我创建的函数需要位于名为the.Name的对象内。 所以我想做的是行不通的:

  var funcName = "the.Name";
  window[funcName] = function(){
    // code here
  };

它不起作用的原因是因为我无法引用window["the.Name"]因为这是无效的,正确的方法是window["the"]["Name"]

有人对此问题有解决方案吗? 基本上命名一个名称存储在变量中时位于对象内部的函数。

好的,我似乎了解您的问题。

这是一些入门的代码。

/**
 * @param fn The function to bind.
 * @param path The object to bind to.
 * @param root The root object.
 */
function bindFunc(fn, path, root){
    path = path.split('.');
    var base = root;
    for(var i=0; i<path.length-1; i++){
        base = base[path[i]];
    }
    base[path[path.length - 1]] = fn;
}

bindFunc(function(){  }, 'the.Name', window);

我将猜测您正在尝试做“类似命名空间”的事情。 这是一篇应该让您入门的文章(也有一些不错的示例代码)。

http://blogger.ziesemer.com/2008/05/javascript-namespace-function.html

如果您确定直到最后一个对象都存在(也不能定义最后一个),则最短的方法可能是使用reduce

var func = funcName.split(".").reduce(function(p, c) {
    return p[c];
}, window);

分割字符串,以便您一次可以引用一个级别:

var names = funcname.split(".");
var f = window;
for (var i = 0; i < names.length - 1; i++) {
  f = f[names[i]];
}
f[names[names.length - 1]] = function(){...};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM