ES6 Proxy 학습, Object. defineProperty 와 의 비교, 양 방향 연결 사례
Vue. js 3.0 은 데이터 감청 수단 으로 프 록 시 를 사용 하기 시 작 했 으 니 오늘 배 워 보 겠 습 니 다.
오늘 우리 가 해 야 할 일 은:
MDN 문서
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy
완 일 봉 ES6 수첩
http://es6.ruanyifeng.com/#docs/proxy
기본 문법
아주 간단 합 니 다. 두 개의 인자 만 있 고 하나 도 없습니다.
let p = new Proxy(target, handler);
범례:
const originalObj = {
name: 'xialei'
};
const publicObj = new Proxy(originalObj, {
set(target, prop, value) {
//
target[prop] = value.toString().toUpperCase();
}
});
publicObj.name = 'xialei';
console.log(publicObj.name); // XIALEI
13 가지 방법
응 우 옌 일 펑 의 매 뉴 얼 을 보면 ES6 Proxy 는 13 가지 방법 이 있 는데 그 중에서 대부분이 적 게 사용 하 는 방법 이 고 주로 get, set 이다.
프 록 시 납치 배열 의 범례
let arr = [2,4];
let proxy = new Proxy(arr, {
set(target, prop, value) {
target[prop] = value * 2.5
return true
}
})
proxy[4] = 11
console.log(proxy[4]) // 27.5
proxy.push(22)
console.log(proxy) // 55
Object. defineProperty 와 의 대비
Object. defineProperty (obj, prop, descriptor) 인자 obj 는 속성 대상 을 정의 합 니 다.prop 에서 정의 하거나 수정 할 속성의 이름 입 니 다.descriptor 가 정의 하거나 수정 할 속성 설명자 입 니 다.
보 이 는 곳:
Proxy 로 양 방향 연결 사례 쓰기
나 는 2018 년 9 월 에 일부 문 서 를 참고 한 후에 Object. defineProperty 를 바탕 으로 하 는 양 방향 연결 사례 (https://www.jianshu.com/p/34fd579dfc0b) Vue 2.0 은 바로 그것 에 기초 한 것 이다.현재 Vue 3.0 은 2020 년 1 분기 에 출시 되 며, 오늘 프 록 시 기반 사례 를 작성 한다.대량의 코드 가 작년 글 을 계속 사용 하고 있 습 니 다. 이 사례 에서 코드 가 유일 하 게 변동 해 야 할 것 은 입 니 다.observer 원형 방법.
원래 의 쓰 기 는:
Vue.prototype._observer = function (data) {
var self = this;
Object.keys(data).forEach(function (key) {
var oldValue = data[key];
self._binding[key] = {
_updaterList: []
}
Object.defineProperty(data, key, {
enumerable: true,
configurable: true,
get: function () {
return oldValue;
},
set: function (newValue) {
if (oldValue === newValue) return;
oldValue = newValue;
self._binding[key]._updaterList.forEach(function (updater) {
updater.update();
})
}
});
})
}
현재 쓰 는 방법 은:
Vue.prototype._observer = function (data) {
Object.keys(data).forEach(key => {
this._binding[key] = {
_updaterList: []
}
});
this.$data = new Proxy(data, {
get: (target, prop, value) => {
return target[prop]
},
set: (target, prop, value) => {
if (target[prop] === value) return;
target[prop] = value
this._binding[prop]._updaterList.forEach(function (updater) {
updater.update();
})
}
});
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.