2016-07-03 1 views
2

안녕하세요.이 커뮤니티는 간단한 질문입니다.Js OOP : 클래스의 전용 변수

누군가가이 인쇄가 왜 '정의되지 않은'이유인지 알 수 있습니까? 내가 john.bankBalance 느릅 나무를 인쇄 할 마지막 줄에서

function Person(first,last,age) { 
 
    this.firstname = first; 
 
    this.lastname = last; 
 
    this.age = age; 
 
    var bankBalance = 7500; 
 
} 
 

 
// create your Person 
 
var john = new Person ('John','Doe',33); 
 

 
// try to print his bankBalance 
 
document.write (john.bankBalance);

는 7500 개 감사합니다!

+0

- : 우리가 그들을 제거하는 추가 시설, 설비를 줄 수 있으며 그들은 단지 짝수 인덱스를 볼 수 있도록 우리가 배열을 조작 개발자를하지 않을 수 있습니다 아래의 예에서 'bankBalance' 속성을 가지고 있습니다. 자바 스크립트의 범위 지정 규칙 때문에 생성자 함수'Person'의 변수'bankBalance'를 사용할 수 없습니다. 또한 JS에는 개인 속성에 대한 언어 지원이 없습니다. 하지만 클로저를 사용하여이를 시뮬레이션 할 수 있습니다. –

+0

초보자는 JS에 "클래스"가 없다는 것을 명심해야합니다. 대신 JS는 프로토 타입을 사용합니다. 당신이'var bankBalance'를 할 때, 그것은 멤버 속성을 선언하는 자바와 같지 않고 지역 변수만을 정의합니다. 프로퍼티를 추가하려면 인스턴스의 속성 ('this.bankBalance')을 실제로 변경하거나 프로토 타입 ('Person.prototype.bankBalance = 7500')을 통해 변경해야합니다. –

+0

감사합니다. Js가 작동하는 방식을 조금 알았습니다. –

답변

0

이는 클로저로 알려진 Javascript의 특성 때문입니다. 기본적으로 객체가 중첩 된 경우 내부 객체는 외부 객체의 변수에만 액세스 할 수 있습니다. this 키워드를 사용하여 본질적으로 변수를 해당 객체의 속성으로 만듭니다. var를 사용하여 선언 된 변수는 메서드를 정의한 객체에 액세스 할 수 없습니다. 흥미로운 읽기 위해 여기에이 링크

http://javascript.crockford.com/private.html

을 확인 개인 변수 및 일부 공공 방법과 속성을 가진 객체의 예입니다하시기 바랍니다. 이러한 특성은 객체 사용을 제한 할 때 유용합니다. john`하지 않는`때문에

function SpecialArray() { 

    var _array = []; 

    this.length = _array.length; 

    this.add = function(stuff) { 
     // add some stuff to it 
    } 

    this.remove = function(stuff) { 
     // take some stuff out of it 
    } 

    this.displayEvenNumbers = function(){ 
     for (var i=0; i< _array.length ; i+=2){ 
      console.log(_array[i]); 
     } 
    } 
} 
0

bankBalance 작성한대로 작성자에게만 적용됩니다. 인스턴스 변수로 액세스하려면 this.firstname 등으로 선언해야합니다. al.

1

bankBalance는 기능 범위에서만 사용할 수 있습니다. 공개적으로 액세스하려면 firstname 및 lastname과 마찬가지로 "this"로 정의해야합니다.

1

bankBalance의 범위로 인해 this을 생성자에만 추가해야합니다. 이 작업을 수행 할 수 있습니다 :

this.bankBalance = 7500; 

을 양자 택일로, 당신은과 같이 bankBalance에 대한 게터/세터를 설정할 수 있습니다 : 여기

this.getBalance = function() { 
    return bankBalance; 
} 

this.setBalance = function(balance) { 
    bankBalance = balance; 
} 

는 지역 변수 bankBalance에 대한 getter와 setter와 기능을 보여주는 JSFiddle입니다 .

또 다른 JSFiddle에는 인스턴스 변수로 액세스 할 수있는 'public'bankBalance 변수가 있습니다.