Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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_Namespaces - Fatal编程技术网

Javascript并从一个命名空间属性引用另一个命名空间属性

Javascript并从一个命名空间属性引用另一个命名空间属性,javascript,namespaces,Javascript,Namespaces,可能重复: 假设我有: var myNamespace = { _prop1: 'hello', _prop2: _prop1 + ' you!' }; 我刚刚发现,这将在加载时在\u prop2上出错 我不明白为什么这不起作用,我在代码中已经解决了这个问题,但我仍然想理解。好吧,你可以这样做 var myNamespace = { _prop1: 'hello', _prop2: myNamespace._prop1 + ' you!' };

可能重复:

假设我有:

var myNamespace = {
      _prop1: 'hello',
      _prop2: _prop1 + ' you!'
};
我刚刚发现,这将在加载时在
\u prop2
上出错

我不明白为什么这不起作用,我在代码中已经解决了这个问题,但我仍然想理解。

好吧,你可以这样做

var myNamespace = {
      _prop1: 'hello',
      _prop2: myNamespace._prop1 + ' you!'
};
我认为在声明中不可能用任何其他方式(例如:使用“self”或“this”不起作用)

好吧,你可以这样做

var myNamespace = {
      _prop1: 'hello',
      _prop2: myNamespace._prop1 + ' you!'
};
我认为在声明中不可能用任何其他方式(例如:使用“self”或“this”不起作用)

您必须使用:

var myNamespace = {
    _prop1: 'hello'
};
myNamespace._prop2: myNamespace._prop1 + ' you!';
您必须使用以下选项:

var myNamespace = {
    _prop1: 'hello'
};
myNamespace._prop2: myNamespace._prop1 + ' you!';

当您尝试设置prop2时,对象尚未初始化,因此prop1和mynamespace的值都未定义

有两种方法可以实现您想要的,一种方法是将prop2创建为一个函数,这样它就可以动态地获得prop1的值

var myNamespace = {
      _prop1: 'hello',
      _prop2: function(){ return this._prop1 + ' you!' }
};

另一种方法是在myNamespace初始化后设置prop2,当您尝试设置prop2时,对象尚未初始化,因此prop1和myNamespace的值都未定义

有两种方法可以实现您想要的,一种方法是将prop2创建为一个函数,这样它就可以动态地获得prop1的值

var myNamespace = {
      _prop1: 'hello',
      _prop2: function(){ return this._prop1 + ' you!' }
};

另一种方法是在初始化myNamespace后设置prop2

实际上我也尝试过这个方法,但仍然得到一个未定义的错误。真奇怪。可能是铬的吗?我将尝试另一个浏览器并报告。不,不在Firefox中。如果您使用var myNamespace={};myNamespace={uProp1:'hello',uProp2:myNamespace.\uProp1+'you!'};这个答案肯定行不通。你必须按照bfavaretto的回答分两步来做。实际上我也试过了,但仍然得到了一个未定义的错误。真奇怪。可能是铬的吗?我将尝试另一个浏览器并报告。不,不在Firefox中。如果您使用var myNamespace={};myNamespace={uProp1:'hello',uProp2:myNamespace.\uProp1+'you!'};这个答案肯定行不通。根据bfavaretto的回答,你必须分两步进行。记住,你所声明的东西直到最后一个}才真正存在;在上面的代码中,因为这是未编译的,所以您将得到的错误(_prop1未定义)实际上告诉了您事情的全部真相!在javascript中,变量作用域的工作方式与C或其他语言略有不同。当您请求一个变量时,它会检查该变量是否在当前范围内(在相同的括号之间)声明为变量,或者它是否是全局对象的变量(浏览器上下文中的窗口)。此处_prop1未在同一上下文中声明为var,因此无法访问;在上面的代码中,因为这是未编译的,所以您将得到的错误(_prop1未定义)实际上告诉了您事情的全部真相!在javascript中,变量作用域的工作方式与C或其他语言略有不同。当您请求一个变量时,它会检查该变量是否在当前范围内(在相同的括号之间)声明为变量,或者它是否是全局对象的变量(浏览器上下文中的窗口)。此处_prop1未在同一上下文中声明为var,因此无法访问。