通过原型截获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);
      }
    },
  });




原文地址:https://www.cnblogs.com/zhishaofei/p/14440401.html