所以以下内容不起作用:
var Foo = {
array1 : ['apples', 'oranges', 'grapes'],
arrayLength : array1.length // error
}
我有没有办法在对象中访问Foo.array1
的长度?
答案 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']);