Javascript:访问自己的Object变量

时间:2011-10-06 11:46:40

标签: javascript

所以以下内容不起作用:

var Foo = {
    array1 : ['apples', 'oranges', 'grapes'],
    arrayLength : array1.length // error
}

我有没有办法在对象中访问Foo.array1的长度?

3 个答案:

答案 0 :(得分:2)

你需要这样做:

var Foo = {};
Foo['array1'] = ['apples', 'oranges', 'grapes'];
Foo['arrayLength'] = Foo['array1'].length;

或者像这样(更清洁恕我直言):

var Foo = function() {
   var a = ['apples', 'oranges', 'grapes'];
   return {'array1': a, 'arrayLength':a.length};
}();

另一种选择:

function Foo(array) {
   this.array1 = array;
   this.arrayLength = array.length;
   //other stuff...
}

var f = new Foo(['apples', 'oranges', 'grapes']);

但实际上,这对我没有多大意义你已经存储了数组,为什么需要缓存length属性?`< / em>的

答案 1 :(得分:0)

或:

 var x;
 var Foo = {
     array1 : x = ['apples', 'oranges', 'grapes'],
     arrayLength : x.length
 };
 alert(Foo.arrayLength);

显然不太好,Jacob Relkin的解决方案更好

答案 2 :(得分:0)

你无法真正访问这样的财产 您可以使用以下功能:

var Foo = {
    array1 : ['apples', 'oranges', 'grapes'],
    arrayLength : function(){ return this.array1.length;}
}

这实际上是一件好事,我建议使用它,因为Foo.array1数组可以及时更改,并且您可能希望更新arrayLength字段。

另一种选择是使用一个返回对象文字的闭包:

var Foo = (function(){
    var array1 = ['apples', 'oranges', 'grapes'];
    return {
        array1 : array1,
        arrayLength : array1.length
    };
})();

如果您真的想进入oop,可以使用“构造函数”和prototypes

var FooClass = function(array){this.init(array);}
FooClass.prototype = new function(){
    this.init = function(array){
        this.array1 = array;
        this.updateArrayLength();
    };
    this.updateArrayLength = function(){
         this.arrayLength =  this.array1.length;
    };
    this.array1 = [];
    this.arrayLength = 0;        
};

var Foo = new FooClass(['apples', 'oranges', 'grapes']),
    Foo2 = new FooClass(['bananas', 'limes', 'grapefruits']);