2014-10-21 4 views
0

Node.js에 Object과 같은 특수 단어 (기술적으로 미리 정의 된 전역 변수)를 다시 정의하는 것이 얼마나 바람직합니까? 나는 mongoose 모델을 가지고 있는데, 왜냐하면 객체를 나타 내기 때문에 객체를 호출하기를 원하기 때문입니다. 그리고 컨벤션은 mongoose 인 것처럼 보이므로 모델은 대문자 인 것 같습니다. 그러나, 나는 Object이 JavaScript의 키워드임을 알아 냈습니다. 나는 Object 키워드가 무엇을하는지 정확히 알기 위해 Node 자체를 사용하려고 시도했다. 그러나 노드 셸에서 console.log(Object.toString());을 실행하면 function Object() { [native code] };을 반환합니다. BooleanString과 같은 다른 특수 단어는 기록 될 때 유사한 출력을 생성합니다. 노드 소스 코드에 들어가 겠지만 불행히도 C 나 C++를 배울 수있는 권한이 없습니다.Node.js의 "Object"키워드 다시 정의

따라서 Object, Array 또는 Number과 같은 JavaScript 키워드를 재정의 할 경우의 영향은 무엇입니까? 저는 주로 Node.js의 컨텍스트에서 질문하고 있지만 일반적으로 JavaScript에 대한 정보는 분명 도움이 될 것입니다. 나는 원래이 변수를 사용하지 않을 것입니다. 각 유형의 래퍼 객체 (배열의 경우 , 숫자의 경우 Number 등)는 사용하지 않을 것입니다. 그러나이 변수를 사용할 때 의도하지 않은 결과가 발생할 수 있습니다. 완전히 다른 목적?

+5

'Object'는 (는) 키워드가 아닙니다. 그리고 그렇게하지 마십시오. 그것은 끔찍하게 혼란스러워 할 것입니다. – SLaks

+0

그것은 일종의 특별한 단어입니다. 키워드가 아니라면 무엇이 불려지는지 모르겠습니다. – trysis

+0

미리 정의 된 전역 변수입니다. –

답변

1

하지 마십시오. 간단한 예를 들어 보겠습니다.

@jack:~$ node 
> Object = '' 
'' 
> var c = {} 
undefined 
> c 

util.js:222 
    var keys = Object.keys(value); 
        ^
TypeError: Object has no method 'keys' 
    at formatValue (util.js:222:21) 
    at Object.inspect (util.js:140:10) 
    at REPLServer.self.writer (repl.js:177:19) 
    at finish (repl.js:291:38) 
    at repl.js:251:15 
    at REPLServer.self.eval (repl.js:122:7) 
    at Interface.<anonymous> (repl.js:239:12) 
    at Interface.EventEmitter.emit (events.js:95:17) 
    at Interface._onLine (readline.js:202:10) 
    at Interface._line (readline.js:531:8) 

스크립트에서 이와 동일한 작업이 수행됩니다. 대신 이러한 개체의 접두어 (또는 네임 스페이스)를 사용해야합니다.

+0

로컬 변수로 만들면 그리 나쁘지 않을 것입니다. (그러나 여전히 좋은 생각은 아닙니다.) – SLaks

+0

@JohnnyHK가 말했던 것을 그냥하고 ObjectModel을 사용한다고 생각합니다. 왜 그렇게 나쁜지 알고 싶었습니다. – trysis