2
저는 생성자 모듈 패턴을 사용하여 개인 속성에 액세스하는 방법을 찾고 있습니다. 나는 작동하는 솔루션을 생각해 냈지만 이것이 최적이라고 확신하지는 않습니다.javascript 모듈 패턴에서 함수 프로토 타입의 private 속성에 어떻게 액세스합니까?
mynamespace.test = function() {
var s = null;
// constructor function.
var Constr = function() {
//this.s = null;
};
Constr.prototype.get = function() {
return s;
};
Constr.prototype.set = function (s_arg) {
s = s_arg;
};
// return the constructor.
return new Constr;
};
var x1 = new mynamespace.test();
var x2 = new mynamespace.test();
x1.set('x1');
alert('x1 get:' + x1.get()); // returns x1
x2.set('x2');
alert('x2 get:' + x2.get()); // returns x2
alert('x1 get: ' + x1.get()); // returns x1
현재 JavaScript가 제공하는만큼 좋습니다. 그러나 "새로운 생성자"(즉, 인스턴스)는 반환하지 말고 생성자 자체 만 반환하면됩니다 ('return Constr;). – Niko
당신은 ** 최적의 *를 가질 수 없습니다 (예 :'prototype' 상속을 사용합니다). JavaScript에서 private 멤버가 숨어 있습니다. ** prototype 상속만을 사용하는 가짜 비공개 멤버 (예 :'this._imAPrivateMember')를 ** 가질 수 있습니다. 귀하의 경우, 각각의 새로운 mynamespace.test는 각각에 새로운'Contr'과'prototype' 체인을 정의합니다. – Matt
도움 주셔서 감사합니다. 특정 인스턴스화를 위해 프로토 타입 함수 사이에서 공유되는 사유 속성을 저장하기 때문에 매번 새 인스턴스를 생성해야했습니다. ECMA5는 이러한 요구를 해결합니까? – user1953031