【问题标题】:Javascript hasOwnProperty always false on Event objects?事件对象上的 Javascript hasOwnProperty 总是错误的?
【发布时间】:2015-08-01 04:01:55
【问题描述】:

我希望有人可以帮助澄清与事件对象相关的 hasOwnProperty() 方法。

我正在尝试克隆鼠标事件(最终此对象将传递给 iframe) 我已经构建了一个“克隆”功能——但是每当我尝试克隆一个窗口事件(即滚动、单击等)时,所有“hasOwnProperty()”实例都会返回 false。 例如,我遍历对象 - 使用 hasOwnProperty() 来检查 - 每个属性都返回 false。 这适用于标准对象 - 但不适用于事件对象。

这是因为事件对象中的所有属性都是继承的吗? 还是代码有问题?

任何启示将不胜感激:)

代码sn-p:

function cloneObject (o_node) {
 var newObject = {};

  for (var child_node in o_node) {

    if (o_node.hasOwnProperty(child_node)) {
    //no object properties are returning true at this point. 

    newObject[child_node] = o_node[child_node];

    }else{
    console.log("!hasOwnProperty()");
    }
  }
 return newNode;
}

function onclick(e){

   var cloned_object_e = cloneObject(e); //returns an empty object;

}

window.addEventListener('click', onclick);

【问题讨论】:

    标签: javascript events clone hasownproperty


    【解决方案1】:

    您的假设是正确的 - e 参数是一个空心的 new MouseEvent 对象,它没有自己的属性,只有从原型链 MouseEvent<-UIEvent<-Event 继承的那些。这是继承图:

    【讨论】:

      【解决方案2】:

      您创建了一个名为 newObject 的对象,但您返回了一个名为 newNode 的对象,您从未对其进行定义或添加任何内容。尝试将您的退货声明更改为:

      return newObject;
      

      我认为这将为您提供一个具有事件本身具有的一些属性的对象。

      【讨论】:

      • 哎呀!谢谢eddyjs。复制时这是一个错字 - 在实际代码中它是相同的名称。 :)
      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 2015-01-27
      • 2019-01-30
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      相关资源
      最近更新 更多