获取input.value错误的set descriptors

时间:2017-01-23 16:06:18

标签: javascript frontend

var inp = document.querySelector('input');
Object.defineProperty(inp, "value", {
    get: function() {
      console.log('getter');
      return this.value;
    },
    set: function(value) {
       console.log('setter');
       this.value = value + '1';
    }
});

我想用set输入值编写我的逻辑,但是当我尝试获取或设置值时,此代码不起作用,无限循环;

我如何在变更值上做自定义处理程序? (我需要更改值,这样:input.value =" custom",no input.setValue(" custom")!)

1 个答案:

答案 0 :(得分:1)

你可以这样做:



var inp = document.querySelector('input');

function createGetSetValue( inputElement ){
  var value = inputElement.value;
  Object.defineProperty( inputElement, "value", {
    get: function(){ return value; },
    set: function( v ){ value = v + '1'; }
  });
  return inputElement;
};

createGetSetValue( inp );

inp.value = 10;
console.log( inp.value ) // Logs 101

<input value="2" />
&#13;
&#13;
&#13;

因为当你使用this.value = x时,你再次调用setter (导致无限循环)。这将独立存储值并设置getter和setter以返回 值而不是实际存储在输入中的值,允许您修改它而无需再次调用getter和setter。