通过原型截获input.value的方法
在原来的属性描述符上重写:
function customInputSetter(){ var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value"); var originalSet = descriptor.set; // define our own setter descriptor.set = function(val) { console.log("Value set", this, val); originalSet.apply(this,arguments); } Object.defineProperty(HTMLInputElement.prototype, "value", descriptor); }
保留之前的属性描述符的set:
const original = Object.getOwnPropertyDescriptor(target, key); Object.defineProperty(target, key, { set(value) { d.set!.call(this, value); if (original && original.set) { original.set.call(this, value); } }, });