이 양식이 유용한 여러 가지 방법이 있습니다. 하나는 코드 세그먼트를 어휘 적으로 범위 지정하여 코드의 내부 변수와 메서드가 포함 된 코드 본문과 분리되어 있습니다. 이 방법으로, 자바 스크립트의 블록 범위 지정 방법입니다. 하지만이 형식을 사용하는 가장 일반적인 방법이 대안으로이다 :
var ret = {
depth:0,
initialized:false,
helper:function() { /*help with some stuff*/ },
initialize:function(){ /*do some initialization code*/ },
action:function(){/*do the thing you want*/}
destroy:function() { /*clean up*/ }
}
절대적으로 매우 시간이없는 중괄호와 쉼표를 찾기 위해 소모된다이 형식에 대해 저를 죽이는 것은. 예를 들어 위의 코드는 action
선언 끝에 쉼표가 없으므로 작동하지 않습니다. 예외가 발생하면 문제가 발생하기 때문에 문제를 발견하는 데 어려움이있었습니다. "문제를 일으키는"부분이 아니라 전체 진술. 이것은 피할 수만 있다면 더 이상이 형식을 사용하지 않는 예측 가능한 문제입니다. 내가 거부. 대신 다음과 같이 훨씬 더 명확하게 작성할 수 있습니다.
var ret = (function(){
var self = {},
initialized = false;
var helper = function() { /*help with some stuff*/ };
self.depth = 0;
self.initialize = function() {/*do some initialization*/};
self.action = function() {/*do the thing you want*/};
self.destroy = function() { /*clean up*/ };
return self;
}());
저에게는 두 가지 큰 이점이 있습니다. 누락 된 중괄호와 쉼표가 더 쉽게 발견 될 수 있습니다 (예외가 발생하면 줄 번호가 누락 된 영역에 가깝습니다). 둘째, 일부 변수와 메소드를 비공개로 유지하고 첫 번째 코드 블록의 모든 이점을 유지할 수 있습니다.
마지막으로이 형식에 대한 플러그는 위의 코드 (Singleton과 같은 종류)를 1) 외부에서 호출 중괄호를 제거하고 2) self = {}
을 변경하여 생성자로 변환 할 수 있다는 것입니다. self = this
및 3) 임의로 끝에 return self
제거하려면 다음,`그 때문에
var Ret = function(){
var self = this,
initialized = false;
var helper = function() { /*help with some stuff*/ };
self.depth = 0;
self.initialize = function() {/*do some initialization*/};
self.action = function() {/*do the thing you want*/};
self.destroy = function() { /*clean up*/ };
return self; // this is ignored by the compiler if used as a constructor
};
var ret = new Ret();
제가 직접'var에의 somevar = iteratelist [I]를 사용할 수있는 루프 for' '마무리하는 것이 유용 각각의 반복마다 '나는'변화하고있다. –