2012-07-04 4 views
5

Single Page Apps in Depth에서 발췌 한 내용을 설명 할 수 있습니까?.call/.apply를 사용하여 클래스 메서드 숨기기

클래스에 대한 일반적인 패턴 (a 프로토로부터 인스턴스화 예컨대 오브젝트)를 간단하게 밑줄 그들을 시작하여 개인과 같은 수준의 방법을 표시한다. .call/.apply를 사용하여 "this"를으로 설정하여 클래스 메서드를 제대로 숨길 수는 있지만 여기서는 표시하지 않습니다. 그것은 미성년자입니다 세부 사항.

나는 실제로 대신 밑줄을 표시의 규칙 실제로 접근 할 수없는 '개인'자바 스크립트 방법을 만들 수있는 방법이 제안 생각하지만 구현은 다음과 같은 형태가 될 것이다 상상할 수 없으며, 어떻게 사용될 것인가.

+0

+1 페이지 응용 프로그램 전자 서적 링크! 감사.. – renatoargh

답변

3
var Treasure = function(){ 
    function locate(){ 
    return this.x * this.y + 31337; 
    } 

    function Treasure(x, y){ 
    this.x = x; 
    this.y = y; 
    } 

    Treasure.prototype.find = function find(){ 
    return locate.call(this); 
    }; 

    return Treasure; 
}(); 

locate은 생성자 및 프로토 타입 메서드에 대한 공유 개인 함수입니다. call을 사용하면 메소드처럼 작동하고 this을 사용할 수 있습니다.

이 개념의보다 완전한 구현은 인터페이스 개체와 구현 개체의 개념입니다. 메서드 대신에 몇 가지 무작위 함수 (위의 메서드와 비슷 함)를 사용하는 대신 실제로는 전체 클래스를 비공개로 만듭니다. 인터페이스를 외부에서 만들면 공용 셸 인터페이스와 개인 구현 객체라는 두 개의 객체가 만들어집니다. 이렇게하면 사용하기 쉽고 다르게 다른 API를 공개적으로 제공하는 인터페이스를 노출 할 수 있습니다. 또는 인터페이스 개체의 전체 그룹에 대해 단일 개인 구현 개체를 다시 사용할 수 있습니다.

이것은 실제로 DOM이 작동하도록 지정되는 방법입니다 (일반적으로 js에서는 구현되지 않음). 인터페이스 객체 (예 : 요소 및 노드 객체)는 실제로 해당 단어를 구현하는 기본 구현을 래핑해야합니다. 노출 된 객체는 속성 액세스 및 메서드 호출을 전달하는 셸 이상입니다.

Dom.js는 js로 만든 완전한 기능을 갖춘 DOM 구현입니다. 필자가 익숙한 흥미로운 기술은 완전히 자동화 된 공용 인터페이스 생성이었습니다. 이것이 IDL의 목적입니다. 공개 API는 문자 그대로 자동 생성되므로 실제로 구현되는 개인 구현 만 남습니다. 인간과상의하지 않고 이런 것을 만들 수 있다는 것을 실제로 의미하는 것 : https://github.com/Benvie/svgstuff/blob/master/lib/defs.js

1

이 예제에서는 두 가지 유형의 변수를 볼 수 있습니다. 당신은 첫 번째 개인 것을주의 할 것이다, 두 번째는 접근 공개적입니다 : 내부 테스트를 실행

function x() { 
    var _var1 = "hello"; 
    this.var2 = "world"; 
    x.prototype.innerTest = function() { 
     console.log("inner var1: " + _var1); 
     console.log("inner var2: " + this.var2); 
    } 
} 

var y = new x; 
console.log("var1: " + y._var1); 
console.log("var2: " + y.var2); 

// var1: undefined 
// var2: world 

var1에 클래스 내에서 액세스 할 수 있는지 보여줍니다

y.innerTest(); 
// var1: hello 
// var2: world 
관련 문제