2012-05-15 2 views
1

나는 그렇게처럼 내 클래스에서 개체를 가지고 :자바 스크립트 개체 구문 설탕을 첨부?

옵션은 내가 ab 참조 할 수 있도록, 자바 스크립트에서 현재 범위에 반대 "연결"할 수있는 방법이 있다면 난 그냥 궁금
this.options = { 
    a: 1, 
    b: 2, 
    ... 
}; 

직접 (this.options.athis.options.b 대신). 뭔가 같이 :

attach(this.options); 
var myVariable = a + 3; // 4 
detach(this.options); 

또는 이상에서

with(this.options, { 
    // code here 
var myVariable = a + 3; // 4 
}); 

attachwiththis.options의 모든 아이들을 복용하고 그들이 a를 통해 액세스 할 수 있도록 현재 범위에 부착의 영향을 this.options.a 대신. (with 버전은 작업이 완료되면 this.options을 분리하여 해당 범위 내에서 잠재적으로 손상되는 첨부물을 둘러 쌉니다.

Spidermonkey/Mozilla 엔진에서 작동하는 한 휴대용이 아닌지 상관하지 않습니다.

나는 호기심 때문에 이것을 언급한다. 게으름 : 모든 중첩 된 이름들이 타이핑하기가 짜증나게되고, 나는 R 언어에서 이것이 가능하다는 것을 안다. (실제로 위의 스 니펫의 문법은 거의 무엇인가? 이것을 달성하기 위해 R로 작성하십시오).

답변

1

자바 스크립트를 당신이 설명하는 것과 유사한 작동하는 with statement 있습니다 다음 attachdetach 방법이 콜백 내부 thisdata를 제공해야 나는 그것을 잠재적 인 모호함 때문에 사용하는 데 몇 가지 단점이있다. 위의 예에서 athis.options의 속성이거나 다른 곳에서 정의 된 변수 일 수 있으며 해당 블록을 보면 말할 방법이 없습니다.

with은 권장되지 않으며 (strict mode에는 사용할 수 없습니다).

하지만 안전한 대안이 : 그 (귀하의 예제에서 다시) 참조 변수 this.options 만들 :

var o = this.options; 

var myVariable = o.a + 3; 

그것은 아니에요 확실히 그 자체 a를 입력 짧은,하지만 사방 this.options을 반복보다 짧은입니다 .

+0

아하,'~'은 * 내가 정확히 무엇을했는지. 나는 그것의 사용법과 함께 오는 경고를 이해한다. (R에있는'with /'attach' 함수는 비슷한 경고와 함께 나온다./R 커뮤니티 내에서 비슷한 걱정으로 다뤄진다.) 건배! (잠시 동안 나는 두 번째 방법으로 해결했다). –

0

attachdetach 메서드뿐만 아니라 실제 데이터 개체를 저장하는 내부 캐시와 함께 다른 개체에 개체를 래핑 할 수 있습니다.

with (this.options) { 
    var myVariable = a + 3; // here a is actually this.options.a 
} 

그러나 당신이 MDN 기사에서 볼 수 있듯이 :

function TheObject(data){ 
    var that = this; 

    this.data = data; 

    this.attach = function(callback){ 
     callback.apply(that.data); 
    } 

} 

//wrap the object 
var myobj = new TheObject({ 
    a: 1, 
    b: 2 
}); 


myobj.attach(function(){ 
    //"this" in here is the "data" in the object. 
    //this.a 
    //this.b 
});