2014-07-07 2 views
0

나는 자바 스크립트에 익숙하지 않은 데 대해 궁금해하고있다. 객체 속성을 나열해야하는 방식이 있습니까?자바 스크립트 속성을 언제 초기화해야합니까?

구체적으로 말하면, 객체가 초기 속성없이 만들어지고 코드가 실행될 때 코드를 추가하는 코드를 작성했습니다.

예 : 당신이 볼 수 있듯이 내 코드가 실행으로

Game = {}; 
Game.x = 0; 
...Code code code 
Game.thing = function() { 
    Game.variable = 30; 
} 

, 내 게임 객체 그냥 천천히 속성을 수집한다. 이게 받아 들여질 수 있니? 또는 게임 개체 초기화에서 처음에 사용할 모든 속성을 나열해야합니까? 감사.

답변

2

이 작업을 수행 할 수 있습니다

코드에서 무슨 일을하는지
var Game = { // DON'T FORGET var !!!!! 
    x: 0, 
    something: some_value, 
    thing: function() { 
    this.variable = 30; 
    } 
}; 

정말 잘못하지 않다 (! var 잊지 마세요 제외). 그것은 스타일과 의도의 문제입니다. 위 코드 (중괄호 안에있는 부분)는 "객체 리터럴"이라고하며, JavaScript 값으로 객체를 만드는 방법입니다. 매우 유용하지만, 객체를 구현하는 다른 방법보다 반드시 이 더 나은 것은 아닙니다.입니다. this article에 따라 객체 (나는 생각하지만 V8 적어도 다른 런타임 비슷한 동작을 할 가능성이) 그것을처럼 보이는 시작

편집

참고는 내부적으로 다음,지도처럼 사용되고 그 목적에 최적화되어 있습니다. 그 이후에 객체에 대한 for ... in 루프는 더 이상 최적화 대상이되지 않습니다. 그러한 반복을하기 위해 여전히 Object.keys()을 사용할 수는 있지만 전반적으로 그다지 이익이되지는 않을 것입니다.하지만 많은 속성 생성을 경험하는 객체가 그러한 상황에 빠질 수 있습니다.

+0

왜 이것이 더 좋은지 설명해야합니다. –

+0

@ RobertHarvey 글쎄, 나는 무엇을 말 할까 생각하고있다. 반드시 더 나은 것은 아닙니다 *; 그것은 단지 다릅니다. – Pointy

+0

@Pointy 이해하지만, 모든 것을하기 전에 모든 속성을 나열해야하는지 궁금 해서요. 아니면 개체에 실시간으로 속성을 추가해도 괜찮습니까? 마찬가지로 300 줄 아래쪽에 처음에 나열되지 않은 객체에 새 속성을 추가합니다. 괜찮습니까? – jahmezz

1

정말 응용 프로그램에 따라 다릅니다. 당신이 가서 새로 생성 된 객체에 추가하려는 경우가있을 수 있습니다, 그러나

var Game = { 
    x: 0, 
    thing = function() { 
     this.variable = 30; 
    } 
} 

: 당신은 당신이 그것을 만들 때 개체에 넣어하고자하는 모든 데이터가있는 경우, 객체 리터럴을 사용하여 . 네임 스페이스 (네가하려는 것처럼 보임)가있을 때 일반적입니다.

I는 다음과 같이 시작합니다 :

var Game = Game || {}; 

그런 식으로, 당신은 당신이 다른 물체와 충돌하지 있는지 확인하십시오. 그런 다음 속성과 메소드를 추가하여 거기에서 이동하십시오. 일반적인 접근법은 클로저를 만들고 클로저 내에서 새 메서드를 할당하는 것입니다.

(function() { 
    var foo = function() { 
     ... stuff ... 
    } 
    Game.foo = foo; 
})(); 

그런 식으로 실수로 전역 변수가 생성 될 위험이 없습니다. :)

+0

네, 네임 스페이스를 시도하고 있습니다. 의견을 보내 주셔서 감사합니다! – jahmezz

+0

명확히하기 위해 extra()는 클로저를 생성합니까? 그리고 모든 전역 정의가 중괄호를 벗어나는 것을 방지하는 것처럼 보입니다. 맞습니까? @SeeMeCode – jahmezz

+1

기본적으로 [self invoking function] (http://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/)을 만들 수 있습니다. 종결 자의 역할을하는 익명의 함수를 생성합니다. 클로저를 만드는 실제 함수입니다. [JS의 모든 함수는 자동 닫힘입니다.] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures). – SeeMeCode

관련 문제