2011-10-06 2 views

답변

2

이처럼 수행해야합니다 :

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 속성을 캐시해야합니까`

+0

마지막 질문은 내가 왜 재산을 캐싱해야하는지 생각하게 만들었습니다. Jacob에게 감사드립니다! 클로저에 대해 더 자세히 알아야합니다 ... – user982078

0

나 : 분명히

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

너무 멋지지를, 야곱 Relkin '솔루션은

+0

변수를 사용하려는 경우 정의한 것과 동일한 줄에 실제로 할당 할 수도 있습니다. * –

0

당신은 정말 할 수 없습니다 낫다 그런 속성에 액세스하십시오.
당신은 같은 기능을 사용할 수 있습니다 : 실제로 좋은 일이며, 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']); 
+0

두 번째 예제를 이미 제안한 적이 있습니다. 내 대답. –

관련 문제