2014-01-23 4 views
0

여기에 : http://www.phpied.com/3-ways-to-define-a-javascript-class/은 자바 스크립트에서 "클래스"를 정의하는 3 가지 방법으로 설명됩니다. 나는 제 3 방법을 사용하는 내 코드에서 선택한 : 나는 내가 가지고있는 의미, 네임 스페이스에서 코드를 분리하는 방법으로이 구성을 사용javascript "class"변수가 정의되지 않았습니다.

var apple = new function(){ 
    //code here 
} 

더 많은 변수 같은 JS 파일에 사과, 각 하나 같은 이름의 함수를 포함 할 수 있습니다.

var customer = new function(){ 
    this.URL = "//customer/"; 
    this.json = {}; 
    this.getData = function(id){ 
     this.prepareForm(); 
     this.json = requestData(this.URL); //requestData deffined in another place 
    } 
    this.save = function(){ 
     //code 
    } 
    this.validate = function(){ 
     //code 
    } 
    this.prepareForm = function(){ 
     //code 
    } 
    // more code here 
} 


var employee = new function(){ 
    //code here, something like the customer code 
} 


var partner = new function(){ 
    //code here, something like the customer code 
} 

지금, 나는 가끔 this.URL정의되지 않은입니다 것으로 나타났습니다. this.prepareForm() 함수가 있으며, 정의되어 있으며 컨텍스트에서 실행 중이므로 변수가 존재하지 않으므로 customer.URL 대신 호출해야합니다. 그러나 이것은 때로는 때때로는 아니며, 왜 그리고 언제 어떻게되었는지를 이해하지 못했습니다.

의견이 있으십니까? 왜 이런 일이 일어나는가?

+1

"prepareForm"함수를 이벤트 처리기와 같이 전달하면 해당 개체와의 관계가 손실됩니다. – Pointy

+0

'this.validate() {'가 올바르게 보이지 않습니까? 'this.validate = function() {'? –

+0

또한 블로그 게시물은 자바 스크립트 우수 사례 표준에 의해 * 실제로 * 오래되었음을 유의하십시오. – Pointy

답변

0

this.jsonthis.josn = requestData(this.URL)은 다릅니다. 답이 될 수는 없지만 확실하게 동일한 변수는 아닙니다. 보세요.

this.json = {}; 
this.getData = function(id){ 
    this.prepareForm(); 
    this.josn = requestData(this.URL); //requestData deffined in another place 
+0

왜 안 되니? 난 이해가 안 돼 –

+0

철자가 잘못되었습니다.이 코드는 this.json과 다른 코드입니다 .JOSN – ncubica

+0

그냥 오류가 있습니다. 왜냐하면 브라우저 창에 직접 모든 코드를 작성했기 때문입니다. 실제 코드는 정확하고 때로는 그 변수가 정의되지 않은 경우가 있습니다. –

1

코드에 몇 가지 구문 오류가 있으며 @Pointy가 지적한 것처럼이 기사는 실제로 구식입니다. 난 정말 당신이 이럴이, 더 좋은 방법은 당신이 원하는 것을 할이는, 클래스의 메소드를 정의하는 자바 스크립트 클래스를 만드는 방법, 당신보다 효율적으로 사용하는 프로토 타입을 변경해야 할 생각 :

var Customer = function Customer(){ 
    this.URL = "//customer/"; 
    this.json = {}; 
}; 
Customer.prototype.getData = function(id){ 
    this.prepareForm(); 
    this.josn = requestData(this.URL); 
}; 
Customer.prototype.save = function()(){ 
    //code 
}; 
Customer.prototype.validate = function()(){ 
    //code 
}; 
Customer.prototype.prepareForm = function()(){ 
    //code 
}; 
var customer = new Customer(); 
//you can here call your methods like: 
customer.validate(); 
  • 약을 당신의 this.URL에 관한 특정 문제가 정의되지 않은 경우이 문제는 다른 컨텍스트이있는 함수를 호출하는 경우에만 이 발생하므로 코드를 기반으로 콜백 또는 처리기로 전달할 수도 있습니다. getData 콜백 함수로 전달한 것 같습니다. 아약스 호출에 익명 함수를 작성하고 customer.getData()을 호출하는 것이 좋습니다.
관련 문제