2013-07-06 2 views
2

디버그에 문제가없는 일부 네임 스페이스에서 obj 생성자를 유지하려고합니다.네임 스페이스 javascript에서 obj 생성자를 정의하는 가장 좋은 방법

는 지금은이 같은 코드를 가지고 : 그 생성자 익명처럼

var namespace = {}; 
namespace.myConstructor = function(){}; 
// ----------- debug in console 
(new namespace.myConstructor()); // -> namespace.myConstructor {} 
(new namespace.myConstructor()).constructor; // -> function(){} 

내가 해달라고. 그래서 나는 다른 방법으로 그것을 할 수 :

(더 나은,하지만 추한)

var namespace = {}; 
namespace.myConstructor = (function(){ 
    function myConstructor(){}; 
    return myConstructor; 
})(); 
// ----------- debug in console 
(new namespace.myConstructor()); // -> myConstructor {} 
(new namespace.myConstructor()).constructor; // -> function myConstructor(){} 

또는 (가장 beautful 및 짧은 방법)

namespace.myConstructor = function myConstructor(){}; 
// ----------- debug in console 
(new namespace.myConstructor()); // -> myConstructor {} 
(new namespace.myConstructor()).constructor; // -> function myConstructor(){} 

하지만, here을 읽어가 NFE (Named Function Expression)에 대한 몇 가지 문제점이 있습니다.

어느 쪽이 더 낫습니까? 좋은 습관은 어느 것입니까?

+0

@Yive 추가 질문을 삭제했습니다. 이제 괜찮습니까? – akaRem

답변

0

IE8의 문제는 과장되어 있으며 실제 브라우저에서는 코드가 작동하지 않으므로 어쨌든 이름으로 함수를 참조 할 수없는 단명 IIFE에서 함수가 선언되므로 실제로 문제가되지 않습니다.

생성자 이름을 대문자로 사용하십시오.

(function(){ 
    var namespace = { 
     MyConstructor: function MyConstructor() { 

     }, 

     ... 
    } 
})(); 
관련 문제