Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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_Jquery_Namespaces_Introspection - Fatal编程技术网

javascript名称空间作为字符串

javascript名称空间作为字符串,javascript,jquery,namespaces,introspection,Javascript,Jquery,Namespaces,Introspection,我有以下名称空间(com.myCompany.myProject): 例如,我有以下代码: var self = com.myCompany.myProject; 如何将此命名空间显示为字符串,例如“com.myCompany.myProject” 我已经尝试过JSON.stringify(),但它不是我想要的 谢谢,这是不可能的。 对象无法知道它存储在哪里 如果需要这种功能,必须将其存储在对象中的某个位置 var com = { myCompany: { myProject: {

我有以下名称空间(com.myCompany.myProject):

例如,我有以下代码:

var self = com.myCompany.myProject;
如何将此命名空间显示为字符串,例如“com.myCompany.myProject”

我已经尝试过JSON.stringify(),但它不是我想要的

谢谢,这是不可能的。 对象无法知道它存储在哪里

如果需要这种功能,必须将其存储在对象中的某个位置

var com = {
  myCompany: {
    myProject: {
      x: 1,
      y: 2,
      '_namespace': 'com.myCompany.myProject',
      o: function() {
      }
    }
  }
};

正如seanizer所说,这是不可能的。以下是一些可能的相关事项:

将属性索引为字符串:

var self = com["myCompany"]["myProject"];

// or even...
var myCo = "myCompany";
var myPr = "myProject";
var self = com[myCo][myPr];
alert(myCo + "." + myPr);
以字符串形式获取对象的所有属性:

for(var p in com) {
    alert(p.toString());
}

这两种方法中的任何一种都能帮助你吗?

这可能不是你所需要的,但是,嘿,它可能会帮助你。Ext有一个名为Ext.namespace的方法,别名为Ext.ns。它的工作原理如下

Ext.ns('com.app.package'); com.app.package.Clazz=function(){}


如果这对您有帮助,请使用他们的源代码作为灵感。

您问过如何使用,下面是我能想到的最简单的方法。它涉及评估,但请不要以此为基础进行判断:

var ns = 'com.myCompany.myProject'
    ,self = eval(ns);

console.log(self.x); // 1

我有一个类似的要求,我想使用一个对象映射来避免代码中有神奇的字符串。例如,我想要一个消息地图,如:

var message = {
  configuration:
  {
    pdms: 
    {
      type: {
        getTypes: {},
        getDatabases: {}
      }
    }
  }
};
现在不再使用如下字符串:

“message.configuration.pdms.type.getTypes”

我想使用:

message.configuration.pdms.type.getTypes
并将其转换为字符串。为此,我使用以下实用程序函数。请注意,lib是必需的

var objectToString = (orig, string, obj) => {
  var parse = (orig, string, obj) => {
    return _.map(_.keys(orig), (key) => {
      if (_.isEmpty(orig[key])) {
        return orig[key] === obj ? string + '.' + key : '';
      } else {
        return objectToString(orig[key], string + '.' + key, obj);
      }
    });
  };
  return _.chain(parse(orig, string, obj))
          .flatten()
          .find ((n) => {return n.length > 0;})
          .value();
};
为了更方便,我将该函数与源对象一起部分应用,以转换为字符串和根命名空间

var messageToString = _.partial(objectToString, message, 'message');

messageToString(message.configuration.pdms.type.getTypes);
// returns: 'message.configuration.pdms.type.getTypes'

是的,我知道。我以前用过,很有用。但这不是我想要的。
var messageToString = _.partial(objectToString, message, 'message');

messageToString(message.configuration.pdms.type.getTypes);
// returns: 'message.configuration.pdms.type.getTypes'