2011-11-30 6 views
0

다음 예제 클래스가 클래스 속성과 동등한 지 알 수 있습니다. 하나는 건설업자와 외부에 정의되어 있습니다.자바 스크립트 클래스 속성

예 내가 두 번째 유형을 사용하고 있지만 모두 작동하는 것 같다 2

function Test(input) 
{ 
    this.output = input ;   
} 

Test.WELCOME = "Hello ; 

1

function Test(input) 
{ 
    this.output = input ; 
    Test.WELCOME = "Hello ; 
} 

예. 당신을 가정

건배

+2

class? 자바 스크립트? –

+0

관련 항목 : [Javascript의 Class 키워드] (http://stackoverflow.com/questions/1728984/class-keyword-in-javascript). Zoso -이 JavaScript는 어디서 실행됩니까? (아마도 브라우저가 아님) – Kobi

+0

매우 초기 ES.Next 알파 엔진에 있지 않으면 javascript에'class' 키워드가 사용되지 않습니다. – jAndy

답변

2

의미 :

function Test(input) 
{ 
    this.output = input; 
    Test.WELCOME = "Hello"; 
} 

예 2

function Test(input) 
{ 
    this.output = input ;   
} 
Test.WELCOME = "Hello"; 

그런 다음 그러나 예 1 당신을, 어떤 new Test 개체의 속성 측면에서 차이가 없을 것 메소드 호출시마다 속성을 Test 함수에 할당하는 반면, 예제 2에서는 이 속성은 한 번만 할당됩니다.

+0

고마워요. – ZosoOfZep

2

나는 정말로 당신이 원하는 것을하지 않는다고 확신한다. 일반적으로 this의 내부는 Test이고 유용한 경우는 new을 사용하여 인스턴스화하는 것입니다. Test 자체에 대한 속성 설정은 x = new Test('someinput')을 사용하여 만든 개체에 아무런 영향을 미치지 않습니다. 당신이하고자하는 것은 Test.prototype.WELCOME = 'Hello'이고 인스턴스는 Test[[proto]] 트리에 그 속성을 가지고 그것을 사용할 수 있습니다.

function Test(input){ 
    this.output = input; 
} 
Test.prototype.WELCOME = 'Hello'; 

var instanceOfTest = new Test('whatever'); 

// produces this structure: 
instanceOfTest => { 
    output: 'whatever', 
    __proto__: { 
    WELCOME: 'Hello' 
    } 
} 

console.log(instanceOfTest.WELCOME); // 'Hello' 
+0

프로토 타입을 사용하면 각 객체의 인스턴스가 WELCOME이됩니다. 내 예제대로 사용하면 속성은 인스턴스가 아닌 '클래스'와 연결됩니다. – ZosoOfZep

+0

올바르지 않습니다. 'new'를 사용하여 생성 된 모든 인스턴스는 단 하나의 __proto__를 참조 할 것입니다. 이 속성은 한 곳에서만 존재합니다. 'Test'는 생성자이며'[[proto]] 트리에는 없습니다. 'Object.prototype'에 비해'Object'에있는 함수를보세요. 그런 다음'x'가'var x = {};'를 할 때 숨겨진 메소드가 무엇인지보세요. –

+0

각 개체에는 프로토 타입 개체가 있음을 이해합니다. 프로토 타입의 모든 속성은 객체의 속성으로 나타납니다. 내 예제의 인스턴스를 보면 WELCOME이 속성 중 하나가되지 않습니다. 클래스 이름을 통해서만 액세스 할 수 있습니다. – ZosoOfZep