좋아, 대답이 있습니다 : @Bergi & @ damianmr에서 제안한대로 Proxy
개체를 사용했습니다.
function Test() {
this.dataStore={};
this.data=new Proxy(this,{
set(target,property,value) {
target.dataStore[property]=value;
},
get(target,property) {
return target.dataStore[property];
}
});
}
Test.prototype={
};
var test=new Test();
test.data.whatever=23;
test.data.etc=46;
alert(`${test.data.whatever} ${test.data.etc}`);
당신이 볼 수 있듯이 : 여기
는 작업 버전입니다
- I 객체가
dataStore
라고했고, 프록시는 data
- 프록시는 생성자에서 설정됩니다라고
이것은 간단한 추상화 된 경우입니다. 하지만 더 복잡한 프로젝트에서 작동합니다.
유일한 단점은 IE가 Proxy를 지원하지 않는다는 것과 내가 본 polyfills가 새로운 속성을 좋아하지 않는다는 것입니다. 단지 그들이 죽을 때까지 내가 레거시 브라우저의 기능적인 대안을 제공하고, 기다릴 필요가 의미
...
은'test.value' 객체가'.value' 세터를 호출하지 않는의 속성을 설정 , 아니. – Bergi
왜 이것을하고 싶습니까? '.whatever' setter로'.value'와 object를 만들 수도 있고 프록시를 사용하여 모든 접근을 캐치 할 수도 있지만 실제 문제에 대한 간단한 해결책이 될 것입니다 (https://meta.stackexchange.com)./q/66377). – Bergi
@Bergi 'NodeList'와 비슷한 여러 요소를 포함하는 간단한 배열과 유사한 객체를 개발 중입니다. 이 개체에 대해 단일 요소에서 유사한 형식을 사용하여 일부 작업을 수행하고 싶습니다. 'elements.innerHTML'을 쉽게 구현할 수 있지만'elements.style'에는 중첩이 필요합니다. 'elements.style (property [, value])'를 사용할 수 있다는 것을 알고 있지만, 단일 요소 작업을 미러링하는 것을 선호합니다. 대체 솔루션이 있지만 Getters & Setters 사용에 대해 자세히 알고 싶습니다. – Manngo