2013-01-19 2 views
0

자바 스크립트에서 정적 멤버를 에뮬레이트하려고합니다. 지금자바 스크립트의 정적 멤버

// option A for static members: 

    // constructor... 
    function Person(name) { 

     this.firstName=name;   
    } 

    Person.count=0;    // like a static member... 
    var p=new Person("Dan"); 
    Person.count++; 

    alert(Person.count); // 1; 

이 하나 :

이 코드 고려 그래서

// option B for static members: 
      // constructor.. 
    function Person(name) { 

     this.firstName=name; 
     Person.prototype.count++;  

    } 

    Person.prototype.count=0;  // like a static member... 
    var p=new Person("Dan"); 
    alert(Person.prototype.count); // 1; 

    //  ... 

을, 사실 그 둘 사이의 주요 차이점은,라고 말할 것입니다 두 번째 예에서는 당신이 할 수있는 그 (프로토 타입 decleration 때문에) constructor의 정적 멤버를 참조하십시오. 첫 번째 예제에서는 그렇지 않습니까?

답변

1

두 예제 모두에서 생성자 내에서 얻을 수 있습니다. 차이점은 당신이 당신의 물건 중 하나를 통해 그것을 얻을 수 있는지 여부입니다.

옵션 A :

function Person (name) { 
    this.firstName = name; 
    Person.count++; 
} 

Person.count = 0; 
var p = new Person("Dan") 

console.log(Person.count) // 1 
console.log(p.count) // undefined 

옵션 B :

function Person (name) { 
    this.firstName=name; 
    Person.prototype.count++;  
} 

Person.prototype.count = 0; 
var p = new Person("Dan"); 

console.log(Person.prototype.count) // 1 
console.log(p.count) // 1 
+0

덕분에, 다른 통해 하나 개의 방법이 바람직합니까? –

+0

@yoavbarnea - 옵션 A가 더 좋을 것 같습니다. –

+0

@yoavbarnea 옵션 B는 실제로 정적 멤버가 아니며 인스턴스 멤버입니다. JS에서는 프로토 타입에서 인스턴스 멤버에 액세스하여 인스턴스 멤버를 호출 할 수 있습니다. –