2010-08-19 7 views
14

나는 아래 클래스와 비슷한 클래스가 있습니다. 개체를 만들 때 내 init 메서드를 호출하려면 어떻게해야합니까? 내 객체의 인스턴스를 생성하고 나서 아래처럼 초기화를 호출하고 싶지 않습니다.자바 스크립트 클래스 - 개체 초기화시 호출 메서드

var myObj = new myClass(2, true); 
myObj.init(); 

function myClass(v1, v2) 
{ 
    // public vars 
    this.var1 = v1; 

    // private vars 
    var2 = v2; 

    // pub methods 
    this.init = function() { 
     // do some stuff   
    }; 

    // private methods 
    someMethod = function() { 
     // do some private stuff 
    }; 
} 
+0

를 수행해도 문제가 해결되지 않는 추가해야합니다. –

답변

30

NB. 생성자 함수 이름은 대문자로 시작해야 일반 문자와 구분할 수 있습니다 (예 : myClass 대신 MyClass입니다.

어느 당신은 당신의 생성자 함수에서 init를 호출 할 수

var myObj = new MyClass(2, true); 

function MyClass(v1, v2) 
{ 
    // ... 

    // pub methods 
    this.init = function() { 
     // do some stuff   
    }; 

    // ... 

    this.init(); // <------------ added this 
} 

이상 단순히 그냥 생성자 함수의 끝에 init 함수의 본문을 복사 할 수 있습니다. 실제로 한 번만 호출되는 경우 실제로는 init 기능을 사용할 필요가 없습니다.

+1

감사합니다. 실제로 'this.init();'을 호출 해 보았습니다. 게시하기 전에,하지만 함수 선언 전에 호출하고 있었기 때문에 작동하지 않습니다. =] –

+0

객체를'var obj = {init : function() {...}} '으로 간단하게 정의하면 어떻게해야합니까? 어떻게 불러야합니까? – Eugene

+0

@Eugene - 무엇이 잘못 되었나요? var makeObj = function (x, y) {return {a : x + y}; }'객체를 생성하고 반환하기 전에 필요한 일회성 초기화를 수행하는 함수입니다. 공장 기능이라고도합니다. –

1

그냥 myClass가 기능에

this.init(); 

를 추가합니다.

3

한 가지 가능한 대답과 코드 수정 내용은 아래를 참조하십시오.

function myClass(v1, v2) 
{ 
    // public vars 
    this.var1 = v1; 

    // private vars 
    // use var to actually make this private 
    var var2 = v2; 

    // pub methods 
    this.init = function() { 
     // do some stuff   
    }; 

    // private methods 
    // this will be private as though it had been declared with var 
    function someMethod() { 
     // do some private stuff 
    }; 

    //call init 
    this.init(); 
} 
+0

고마워, 내 진짜 수업을 간단한 예제로 변환 할 때 오타가 발생했습니다. –

5

이 작업을 수행하는 더 부드러운 방법이있다 :이 방법을 작성하여 호출 모두

this.init = function(){ 
    // method body 
}(); 

가.

1

ECMAScript 2015에 도입 된 JavaScript 클래스는 주로 JavaScript의 기존 프로토 타입 기반 상속에 대한 문법적 설탕입니다. 클래스 구문은 JavaScript에 새로운 객체 지향 상속 모델을 도입하지 않습니다. JavaScript 클래스는 객체를 만들고 상속을 처리하는 훨씬 간단하고 명확한 구문을 제공합니다. MDN web docs

이 구문을 사용하여 만 constructor() 방법은 인스턴스에서 실행되기 때문에 객체를 자동으로 인스턴스화 할 수 없습니다 -

. 당신은 항상 속성이 실제로 프로토 타입 및 프로토 타입 코드가이 생성자 함수 아래에 될 일이 정의되어 사용되는 경우 솔루션의 user = new MyUser()

var user; 
 

 
class MyUser { 
 
    constructor(var1, var2) { 
 

 
    this.var1 = var1; 
 
    this.var2 = var2; 
 

 
    } 
 

 
    static staticMethod() { 
 

 
    // accessed directly with the class name `MyUser` 
 

 
    } 
 

 
    instanceMethod() { 
 

 
    // accessed with object instance 
 
return true 
 
    } 
 

 
} 
 

 
user = new MyUser('hey','there')

관련 문제