2012-08-24 2 views
0

자바 스크립트에서 새 클래스의 프로토 타입에서 참조 할 수 있도록 개인 속성을 만드는 방법이 허용되는지 궁금합니다. 그래서 그 대신과 같이 생성자에서 방법의 생성을 필요로 :프로토 타입에서 참조하는 개인 속성을 만들기 위해 클로저 사용

function Bar(){ 
    var bar = 'bar'; 
    this.getbar = function(){ 
    return bar 
    } 
} 

그래서 같은 프로토 타입에 getbar 방법을 넣어하려면 :

var Bar; 
(function(){ 
    var bar = 'bar'; 
    Bar = function(){}; 
    Bar.prototype.getbar = function(){ 
    return bar; 
    }; 
})(); 
+0

모든 인스턴스간에 공유됩니다. 밑줄 접두사를 사용하여 무언가를 "개인"으로 표시하고 그렇지 않으면 원형을 정상적으로 사용할 수 있습니다. – Esailija

답변

1

당신에게 특히 유용 할 수 없을거야 .

var foo = new Bar(); 
var foo1 = new Bar(); 
var foo2 = new Bar(); 

각각은 .getBar()

.prototype 액세스 개인 NOT 변수, 모든 기간에서 동일한 값을가집니다.

실제로 얻은 것은 인스턴스의 개인 속성보다 정적 속성과 같습니다.

공개 액세스를 만들려면 공용 접근자를 만들어야합니다.이 접근자를 프로토 타입 (또는 코드의 다른 부분)에서 호출 할 수 있습니다 (공개되어 있기 때문에).

function Wallet (amount) { 
    var balance = amount; // this will be unique to each wallet 
    this.getBalance = function() { return balance; }; 
    this.addToBalance = function (amount) { balance += amount; }; 
    // these ***NEED*** to be in the constructor to have access to balance 
} 

Wallet.prototype.addFunds = function (amount) { this.addToBalance(amount); }; 
Wallet.prototype.checkFunds = function() { return this.getBalance(); }; 


var wallet = new Wallet(371.00); 
wallet.addFunds(2.00); 

이제 프로토 타입은 자체 변수에 액세스 할 수있는 공용 메서드에 액세스 할 수 있습니다.
...하지만 그 문제를 통해 갈 이유 프로토 타입에 넣어, 당신은 단지 인스턴스 (어쨌든, 프로토 타입에 뭘하는지입니다)의 공개 방법을 사용할 수 있습니다 때 ?

도덕적이며, 경우 객체 데이터, 다음 프로토 타입에 모든 방법을 이동 주시기 공개적으로 직면하고있다.

그러나 개인 상태가있는 경우 모든 객체에서 해당 상태에 액세스해야하는 메소드는 생성자에 있어야하며 공용 상태 만 사용하는 메소드 (예 : : this이라고 함)이 프로토 타입에 포함될 수 있습니다.

+0

많은 인스턴스를 만들 때 성능을 향상시키기 위해 생성자에서 클래스 메서드를 만들기위한 해결 방법을 찾으려고했습니다. 개인 재산의 고유 한 인스턴스를 만들 수 없으므로 내 시도에서 유용성이 부족하다는 점에 대해 정확합니다. 어쨌든 빠른 응답 주셔서 감사합니다! –

관련 문제