getter/setter는 개인 변수를 볼 수있는 범위에 있어야하며 이러한 변수를 볼 수있는 유일한 범위는 생성자의 내부입니다. 이것이이 변수들이 실제로 사적인 이유입니다. 따라서 setter/getter를 만들려면 함수를 볼 수있는 범위에 함수를 넣어야합니다. 이것은 작동합니다 : http://jsfiddle.net/jfriend00/hYps2/을 :
function winClass (posX, posY, w, h) {
var x = posX || 0;
var y = posY || 0;
var width = w || 0;
var height = h || 0;
this.getX = function() {return(x);}
this.setX = function(newX) {x = newX;}
}
var win1 = new winClass (10, 10, 100, 100);
alert(win1.getX()); // alerts 10
당신이 여기서 일 볼 수 있습니다. 당신이 (나에게 아무 의미 이러한 변수의 개인 성격 주위를 해킹하려는 경우,
function winClass (posX, posY, w, h) {
var privates = {};
privates.x = posX || 0;
privates.y = posY || 0;
privates.width = w || 0;
privates.height = h || 0;
this.get = function(item) {return(privates[item]);}
this.set = function(item, val) {privates[item] = val;}
}
var win2 = new winClass(10,10,100,100);
alert(win2.get("x")); // alerts 10
을 그리고 : 당신이 음부에 대한 일반 게터/세터를 원하는 경우에
, 당신은 이런 식으로 그것을 할 수 당신은뿐만 아니라) 그들에게 다음 표준 인스턴스 변수를 만들 수 있습니다, 당신은 이런 식으로 작업을 수행 할 수 있습니다 여기
function winClass (posX, posY, w, h) {
var privates = {};
privates.x = posX || 0;
privates.y = posY || 0;
privates.width = w || 0;
privates.height = h || 0;
this.getPrivates = function() {return(privates);}
}
winClass.prototype.getX = function() {
return(this.getPrivates().x);
}
winClass.prototype.setX = function(newX) {
this.getPrivates().x = newX;
}
예 : http://jsfiddle.net/jfriend00/EKHFh/합니다.
물론 이것은 변수의 개인 특성을 파괴하므로 정규 인스턴스 변수를보다 쉽게 만들 수 있고 동일한 액세스 제어를 할 수 있기 때문에 실제로 이런 식으로하는 것이 아무런 의미가 없습니다.
그리고 완벽을 기하기 위해 프로토 타입에 접근 자 메서드를 자유롭게 추가 할 수있는 일반 인스턴스 변수 메서드가 있지만 변수는 private이 아닙니다.
function winClass (posX, posY, w, h) {
this.x = posX || 0;
this.y = posY || 0;
this.width = w || 0;
this.height = h || 0;
}
winClass.prototype.getX = function() {
return(this.x);
}
winClass.prototype.setX = function(newX) {
this.x = newX;
}
따라서 자바에서는 '프로토 타입'의 개념이 객체 지향 인 척하려고하는 퍼지 (fudge)입니다. –
그러나 이것은 동적이 아닌 getters/setters의 정적 선언입니다.winClass에 동적으로 추가해야합니다. – Wilk
@Wilk - "동적 getter/setter"를 정의하고 수행하려는 것을 설명하십시오. – jfriend00