0

我负责一个javascript webapp。它非常复杂,我在语法上遇到了一些问题:

getThemeBaseUrl = function() {
  var customConfigPath = "./customer-configuration";                    
  if (parseQueryString().CustomConfigPath) {                           
    customConfigPath = parseQueryString().CustomConfigPath;
  }
  var clientId = parseQueryString().ClientId; 

  return customConfigPath + "/themes/" + clientId;
};

parseQueryString = function() {
  var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;
  while ( m = re.exec(queryString)) {
    result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }
  return result;
};

特别是parseQueryString().CustomConfigPathvar result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;

第一个似乎是 parseQueryString 函数的一种属性访问。

第二个似乎是一个数组声明,但没有 Array() 构造函数。此外,m在 while 循环中调用该值而没有假定的数组结果。

4

2 回答 2

0

通过查看:

parseQueryString().CustomConfigPath

你可以说它应该parseQueryString()返回一个带有CustomConfigPath属性的对象。

由此:

var result = {};

result看那确实是一个对象({}是一个空的对象文字)。它不是一个数组。后来,在一个循环中,有:

result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);

所以我们正在为result对象分配属性。其中一个属性将是(如我们所料) a CustomConfigPath。这将从查询字符串中获取 - 我们将使用正则表达式来执行此操作:re = /([^&=]+)=([^&]*)/g. 因此,执行此代码的网页地址如下所示:http://example.com/something?SomeKey=value&CustomConfigPath=something.

将属性分配给对象的一般语法是:

result[key] = value;
// key   -> decodeURIComponent(m[1]) 
// value -> decodeURIComponent(m[2])
于 2013-10-13T17:16:40.343 回答
0

parseQueryString().CustomConfigPath调用该parseQueryString函数,该函数返回一个对象。然后它访问该CustomConfigPath对象的属性。函数前 4 行的常见用法是:

var customConfigPath = parseQueryString().CustomConfigPath || "/.customer-configuration";

var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m是 4 个不同变量的声明,而不是数组:

  • result是一个空对象
  • queryString是来自当前 URL 的查询字符串,已?删除。
  • re是一个正则表达式
  • m是一个未初始化的变量,稍后将在while循环中分配。
于 2013-10-13T17:19:52.597 回答