접근 :자바 스크립트 : 그래서 다음은 작동하지 않습니다 자신의 객체의 변수
var Foo = {
array1 : ['apples', 'oranges', 'grapes'],
arrayLength : array1.length // error
}
내가 개체 내에서 Foo.array1
의 길이에 액세스 할 수있는 방법이 있습니까?
접근 :자바 스크립트 : 그래서 다음은 작동하지 않습니다 자신의 객체의 변수
var Foo = {
array1 : ['apples', 'oranges', 'grapes'],
arrayLength : array1.length // error
}
내가 개체 내에서 Foo.array1
의 길이에 액세스 할 수있는 방법이 있습니까?
이처럼 수행해야합니다 :
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']);
하지만 실제로는
var Foo = {}; Foo['array1'] = ['apples', 'oranges', 'grapes']; Foo['arrayLength'] = Foo['array1'].length;
또는이 (훨씬 청소기 IMHO) 같은
, 이것은 나에게 많은 의미가되지 않습니다, 당신은 이미 배열을 저장하는 것은, 왜 당신이length
속성을 캐시해야합니까`
나 : 분명히
var x;
var Foo = {
array1 : x = ['apples', 'oranges', 'grapes'],
arrayLength : x.length
};
alert(Foo.arrayLength);
너무 멋지지를, 야곱 Relkin '솔루션은
변수를 사용하려는 경우 정의한 것과 동일한 줄에 실제로 할당 할 수도 있습니다. * –
당신은 정말 할 수 없습니다 낫다 그런 속성에 액세스하십시오.
당신은 같은 기능을 사용할 수 있습니다 : 실제로 좋은 일이며, Foo.array1
배열이 시간을 변경할 수 있기 때문에 내가 이것을 사용하는 것이 좋습니다
var Foo = {
array1 : ['apples', 'oranges', 'grapes'],
arrayLength : function(){ return this.array1.length;}
}
, 당신은 아마도 arrayLength
필드가 업데이트되어야합니다.
또 다른 옵션은 문자 개체 반환하는 폐쇄 사용하는 것입니다 : 당신이 "생성자"를 사용할 수 있습니다 당신이 정말로 OOP 물건에 얻고 싶은 경우에
var Foo = (function(){
var array1 = ['apples', 'oranges', 'grapes'];
return {
array1 : array1,
arrayLength : array1.length
};
})();
및 이에 대한 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']);
두 번째 예제를 이미 제안한 적이 있습니다. 내 대답. –
마지막 질문은 내가 왜 재산을 캐싱해야하는지 생각하게 만들었습니다. Jacob에게 감사드립니다! 클로저에 대해 더 자세히 알아야합니다 ... – user982078