我需要参考A.ns
。我希望这样做:
this.ns
从A
开始访问ns
但不起作用。
var SStorage = FOO.support({
Name: 'SStorage',
// non functions
A: {
storage: null,
ns: 'FOO_',
len: null, // should hold the length of the string in ns:
indicator: 'FOO_h_token'
},
我收到错误
this is not defined
来自A。
答案 0 :(得分:2)
您可以使用js get operator
并实现“属性作为函数”效果:
...
A: {
ns : 'asdsad',
get len(){ return this.ns.length;},
}
...
现在您可以将它用作普通属性:
A.len
这将永远是实际的。
以下是更多详情:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get
答案 1 :(得分:1)
您无法在您拥有的数据结构类型中引用包含对象。同样,在您拥有的静态声明中,您也无法引用同级属性。
您可以在更高级别定义字符串,然后在两个位置引用它,如下所示:
var strData = 'FOO_';
var SStorage = FOO.support({
Name: 'SStorage',
// non functions
A: {
storage: null,
ns: strData,
len: strData.length,
indicator: 'FOO_h_token'
},
当调用者可以随时从传入的字符串中检索长度时,人们可能也想知道为什么要传递长度。它不需要单独传递。
我实际上建议你从数据结构中消除长度,如果你想要一个简短的方法来引用它,那么把它放在FOO.support()
的实现中的局部变量中就像这样:
var SStorage = FOO.support({
Name: 'SStorage',
// non functions
A: {
storage: null,
ns: 'FOO_',
indicator: 'FOO_h_token'
},
});
FOO.support = function(obj) {
var nsLen = obj.A.ns.length;
// now you have the length cached locally without requiring the caller
// to do extra work
}
答案 2 :(得分:0)
len: null, // should hold the length of the string in ns:
您需要使用方法:
A: {
storage: null,
ns: 'FOO_',
indicator: 'FOO_h_token',
len: function(){ return this.ns.length; }
}
当然你称之为
A.len();
但是,正如jfriend00所说,如果这真的是你所需要的,那么就完全放弃len并做
A.ns.length;
答案 3 :(得分:-2)
另一个答案是好的,但不要忘记显而易见的......
var SStorage = FOO.support({
Name: 'SStorage',
// non functions
A: {
storage: null,
ns: 'FOO_',
len: 'FOO_'.length, // should hold the length of the string in ns:
indicator: 'FOO_h_token'
},