글쎄, Chrome에서 Object.watch
의 polyfill을 사용할 때 질문이 생겼습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch https://gist.github.com/eligrey/384583Object.defineProperty 크롬 devtool에서 보이지 않는 부분
polyfill 꽤 짧은 하나이며, 당신은 원래의 속성을 삭제하는 방법을 읽고 바로 새 속성 같은 값이지만 재정의 getter 및 setter로 정의 할 수 있습니다. 당신이 크롬 devtool에서 객체 o
을 확인 그 후
var o = { p: 1 };
o.watch("p", function (id, oldval, newval) {
console.log("o." + id + " changed from " + oldval + " to " + newval);
return newval;
});
을 :이 polyfill을 사용하고 o.p에서 볼 경우
문제이다. 쾅! 객체 o
은 이제 비어 있습니다! 실제로는 여전히 p
속성을 가지고 있습니다. o.p
을 입력하면 o.p = 1
이 표시됩니다.
제 질문은 Chrome 개발자 도구 개체 속성 목록에서 속성이 보이지 않는 이유는 무엇입니까?
참고 : Object.watch
에 대해 모르거나 이해하지 못하는 경우 Object.defineProperty
을 잘 아는 한이 질문에 대해 계속 저를 도울 수 있습니다.
편집 : 새로운 속성을 만들고 그 getter 및 setter를 재정의한다고 생각한 것처럼 편집 할 수 없습니다. 따옴표 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty "객체에있는 속성 설명자는 데이터 설명자와 접근 자 설명자의 두 가지 주요 특성으로 제공됩니다. 데이터 설명자는 값을 가진 속성으로 쓰기 가능하거나 쓰기 불가능합니다. 접근 자 설명자는 다음에 설명 된 속성입니다. getter-setter 한 쌍의 기능. "
그래서 polyfill이 대상 속성을 "데이터 속성"에서 "접근 자 속성"으로 변경하는 것처럼 보입니다. 이걸 polyfill하는 유일한 방법이라고 생각합니까?
보이지 않지만 'watch'폴리 폴리에 의해 'getter'와 'setter'로 변경됩니다. 이것이 시계가 수정 된시기를 아는 방식입니다. – Xotic750
Òk, 코드를 읽으면 복사본을 만들고 이전 속성을 삭제 한 다음 해당 속성을 이전 값의 getter 및 setter로 다시 추가합니다. -> changed – Xotic750
나는 그것을 볼 수있다. [jsfiddle] (http://jsfiddle.net/Xotic750/FUJ5h/) – Xotic750