2011-11-03 4 views
0

의 "중첩"게터와 세터 난 JS 세터와 게터를 사용하여, 이것과 같은 구문을 달성 할 :자바 스크립트

globe.getCamera().setPosition(Position.create()); 
이이 식에 해당 할 supossed된다

globe.camera.position = Position.create(); 

function Camera() { 

    var x,y,z; 

this.__defineGetter__("camera", function() { 
     alert("This is the camera getter"); 
}); 

    this.__defineSetter__("camera", function(position) {    
     alert("This is the camera setter"); 
}); 

} 

... 

globe=new Camera(); 
globe.camera=... 
c=globe.camera; 

... 

그러나 메신저 :

나는 다음과 같이 게터/세터의 .camera 부분의 "첫 번째 수준"을 만드는 데 아무런 문제가 없다 카메라 안의 위치 게터를 정의하는 방법에 대해서는 잘 모르겠습니다. 나는 이와 같은 것을 시도하고 있지만 작동하지 않을 것이다 :

function Position() { 

    this.__defineGetter__("position", function() { 
     alert("This is the position getter"); 
}); 

} 

globe.camera=new Position(); 
pos=globe.camera.position; 

getter 안의 경고는 나타나지 않을 것이다. 이것에 대한 단서가 있습니까? 이 행동을 성취 할 수 있습니까? 나는 Google에서 꽤 많이 검색했지만 havent는 올바른 검색어를 칠 수 있었으며 getters/setter의 예는 매우 단순한 경향이 있습니다. 미리 감사드립니다.

+1

게터에서 결과를 반환하지 않아도됩니까? (그리고 거기에 대한 더 많은 크로스 브라우저 구문이 있다고 생각합니다) – hugomg

+0

예, 실제 코드 반환에 존재하지만 예를 명확히하기 위해 함수 내부의 내용을 찢어 버렸습니다. 구문과 관련하여 본 예제 중 대부분은 이런 식으로 작성되었습니다. –

답변

2

__defineGetter__ 및 친구들은 비표준입니다.

var Camera = Object.create({}, { 
    position: { 
    get: function() { 
     return Position.create(); 
    }, 
    set: function (p) { 
     this._position = p; 
    } 
    } 
}); 

Object.defineProperty(globe, "camera", { 
    get: function() { 
    return Object.create(Camera); 
    } 
}); 

당신은 왜 getter 및 setter를 사용하고, 그러나 Object.defineProperty

를 사용하고자하는 것? 그들은 악합니다. 당신은 당신이 뭔가 영리한 일을하지 않는다면 정말로 그들을 피해야합니다.

+0

알아요.하지만 제 의뢰인은 그들이이 프로젝트에서 그들을 구현하는 데 너무 많은 것을 주장하고 있다고 생각하는 것 같습니다. 내 인생에서 결코 내 자신의 프로젝트에서 이와 같은 것을 사용하지 않을 것입니다. (정직하게 말하면, 나는 그것을 할 것을 요구받을 때까지 JS에 존재한다는 것을 알지 못했습니다.) 어쨌든, 아픈 그 defineProperty 일을 시도하고 그것이 나를 위해 어떻게 작동하는지보십시오. –

+0

@ user995014 기술 전문가가 아닌 고객에게 고객에게 알리십시오. 진심으로 사람들이 왜 고객이 그들을 밀어 붙일 수있게합니까? 99 %의 성능 손실을 어떻게 추측했는지 언급 했습니까? – Raynos

+0

불행히도 제 의뢰인은 소프트웨어 개발 회사이기 때문에 이런 종류의 물건을 다루기가 어렵습니다. 그들은 그들이 올바른 이유가 있다고 생각하고 돈을 넣었습니다. 그래서 ... 그들이 말하는 것처럼 고객은 항상 옳습니다. 그건 그렇고, 당신의 접근 방식은 내 문제를 해결했습니다, 많이 고마워요! –