Javascript中的hasOwnProperty在事件对象上总是false吗?

6
我希望有人能够帮助澄清hasOwnProperty()方法与事件对象的关系。
我正在尝试克隆鼠标事件(最终此对象将被传递到iframe)。 我已经构建了一个“克隆”函数,但无论何时我尝试克隆窗口事件(如滚动、单击等),所有“hasOwnProperty()”实例都返回false。 例如,我遍历对象 - 使用hasOwnProperty()检查 - 每个属性都返回false。 这适用于标准对象-但不适用于事件对象。
这是因为事件对象中的所有属性都是继承的吗? 还是代码有问题?
任何启示都将不胜感激 :)
代码片段:
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);
2个回答

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

enter image description here


请问这个图表是从哪里来的? - Artfaith

0
你创建了一个名为newObject的对象,但是你返回了一个名为newNode的对象,而你从未定义或添加任何内容。尝试将你的返回语句更改为以下内容:
return newObject;

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


哎呀!谢谢 Eddyjs。复制时出错了——实际的代码中名称是相同的。 :) - kinderman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接