JacacaScript 개인 변수 (2) 정적 개인 변수

2086 단어
사유 역할 영역에서 사유 변수나 함수를 정의하면 다음과 같은 특권 방법을 만들 수 있습니다.
(function() {

    //  
    var privateVariable = 10;

    function privateFunction() {
        return false;
    }

    //  
    MyObject = function() {}

    //  / 
    MyObject.prototype.publicMethod = function() {
        privateVariable++;
        return privateFunction();
    };

})()

이 모델은 개인 작용역을 만들고 그 중에서 구조 함수와 상응하는 방법을 봉인했다.사유 작용 영역에서 먼저 사유 변수와 사유 함수를 정의한 다음에 구조 함수와 그 공유 방법을 정의했다.
공유 방법은 원형에 정의된 것으로 전형적인 원형 모델을 나타낸다.
주의해야 할 것은 이 모델은 구조 함수를 정의할 때 함수 성명을 사용하지 않고 함수 표현식을 사용했다는 것이다.함수 성명은 국부 함수만 입을 수 있지만, 그것은 우리가 원하는 것이 아니다.
같은 이유로 My Object를 선언할 때 var 키워드를 사용하지 않았습니다.
명심: 선언되지 않은 변수를 초기화하면 항상 전역 변수가 생성됩니다.
따라서 MyObject는 전역 변수가 되어 개인 역할 영역 밖에서 접근할 수 있다.그러나 엄격한 모드에서 성명되지 않은 변수 부여가 오류를 초래할 수 있다는 것도 알아야 한다.
이 모델은 구조 함수에서 특권 방법을 정의하는 주요한 차이점은 사유 변수와 함수식이 실례에 의해 공유되는 데 있다.
특권 방법은 원형에 정의되어 있기 때문에 모든 실례는 같은 함수를 사용한다.이 특권 방법은 패키지로서 역할 영역을 포함하는 인용을 항상 저장합니다.

(function() {

    var name = "";

    Person = function(value) {
        name = value;
    }

    Person.prototype.getName = function() {
        return name;
    }

    Person.prototype.setName = function(value) {
        name = value;
    }
})()

var person1 = new Person("Bert");
alert(person1.getName()); // "Bert"

person1.setName("Greg");
alert(person1.getName()); // "Greg"

var person2 = new Person("Michael");
alert(person2.getName()); // "Michael"

person1.setName("Greg");
alert(person2.getName()); // "Michael"

위의 Person 구조 함수는 getName () 과 setName () 방법과 마찬가지로 개인 변수name에 접근할 수 있습니다.이런 모드에서 변수name는 정적이고 모든 실례가 공유하는 속성이 됩니다.
즉, 하나의 실례에서 setName () 을 사용하면 모든 실례를 기억할 수 있습니다.setName () 을 호출하거나 새 Person 실례를 만들면name 속성에 새 값을 부여합니다.
결과는 모든 실례가 같은 값을 되돌려 주는 것이다.
이런 방법으로 정적 사유 변수를 만드는 것은 원형을 사용하기 때문에 코드 복용을 증진시킬 수 있지만, 모든 실례는 자신의 사유 변수가 없을 것이다.
실례 변수를 사용할지, 정적 사유 변수를 사용할지는 결국 구체적인 수요에 따라 결정된다.
다중 검색 작용역 중의 한 차원은 어느 정도에 검색 속도에 영향을 줄 수 있다.이것이 바로 폐쇄와 개인 변수를 사용하는 뚜렷한 부족한 점이다.

좋은 웹페이지 즐겨찾기