【发布时间】:2026-01-20 09:05:02
【问题描述】:
我正在使用 customElements.define 注册一些自定义元素,并希望在成员访问器上自动设置陷阱,以便在它们发生变化时发出事件
class State extends HTMLElement {
public someValue = 1;
public constructor() {
super();
console.log('State constructor');
}
}
const oProxy = new Proxy(State, {
get(target, prop: string) {
console.log(`GET trap ${prop}`);
return Reflect.get(target, prop);
},
set(target, prop: string, value: any) {
console.log(`SET trap ${prop}`);
return Reflect.set(target, prop, value);
}
});
customElements.define('my-state', oProxy);
const oStateEl = document.querySelector('my-state');
console.log(oStateEl.someValue);
console.log(oStateEl.someValue = 2);
console.log(oStateEl.someValue);
我的浏览器似乎对上面的代码没有问题,并且在设置元素时我可以看到一些陷阱输出
GET trap prototype
GET trap disabledFeatures
GET trap formAssociated
GET trap prototype
但是当我手动获取/设置值时,不会触发陷阱。 这甚至可能吗?
【问题讨论】:
-
不,我不明白这怎么可能。你到底在做什么?
标签: javascript proxy custom-element