代码之家  ›  专栏  ›  技术社区  ›  Kamil Kiełczewski

为什么事件属性不容易获取?

  •  -1
  • Kamil Kiełczewski  · 技术社区  · 7 年前

    HERE 是可编辑的示例-用法:在输入字段中键入并监视控制台):

    function test(event) 
    {	  
      let keys = Object.keys(event);
      let keysOwnProp = Object.getOwnPropertyNames(event);
      let keysForIn=[]; for(let k in event) { keysForIn.push(k); }
    
    
      console.log('keysForIn',keysForIn);
      console.log('keys',JSON.stringify(keys));
      console.log('keysOwnProp',JSON.stringify(keysOwnProp));
    }
    <input oninput="test(event)" placeholder="type something">

    问题 :

    • 为什么只有在 keysForIn keys keysOwnProp 只有一个: isTrusted
    • 有没有别的选择 凯斯福林 (如果是,请提供)?
    2 回复  |  直到 7 年前
        1
  •  0
  •   brk    7 年前

    看来 Object.keys Object.getOwnPropertyNames 给出仅属于对象的属性,其中 for..in

    document.getElementById('test').addEventListener('input', function(event) {
      let keys = Object.keys(event);
      let keysOwnProp = Object.getOwnPropertyNames(event);
      // location is one of the property which we get on using for..in
      console.log(event.hasOwnProperty('location'))
      let keysForIn = [];
      for (let k in event) {
        keysForIn.push(k);
      }
    })
    <input id="test">
        2
  •  0
  •   Kamil Kiełczewski    7 年前

    Grégory NEUT 答案-哪一个看起来是最好的:

    Object.keys(...) 返回对象的非符号可枚举属性的名称,但仅返回未继承的属性的名称。

    For...in 迭代对象的非符号可枚举属性的名称(无论是否继承)。

    Object.getOwnPropertyNames(...) .


    据我所知,除此之外别无选择 for ... in 获取继承的属性

    function displayDetail(o) {
      let keys = Object.keys(o);
    
      console.log('Object.keys > ', keys);
    
      let keysOwnProp = Object.getOwnPropertyNames(o);
    
      console.log('getOwnPropertyNames > ', keysOwnProp);
    
      const keysForIn = [];
    
      for (let k in o) {
        keysForIn.push(k);
      }
    
      console.log('for ... in > ', keysForIn);
    }
    
    
    /**
     * The basic object
     */
    const obj = {
      own: 'A',
    };
    
    /**
     * We add a non enumerable property to the object
     */
    Object.defineProperty(obj, 'notEnumerable', {
      enumerable: false,
      value: 123,
    });
    
    /**
     * We create a new object based on the first (it will inherit it's properties)
     */
    const objWithInheritedProperties = Object.create(obj);
    
    console.log('REGULAR OBJECT\n');
    displayDetail(obj);
    
    console.log('\n-----------\n');
    
    console.log('OBJECT WITH INHERITANCE\n');
    displayDetail(objWithInheritedProperties);