如何引用包含对象?

时间:2013-06-04 21:24:32

标签: javascript

我需要参考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。

4 个答案:

答案 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'
},