6

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

我正在尝试克隆鼠标事件(最终此对象将传递给 iframe) 我已经构建了一个“克隆”功能 - 但每当我尝试克隆一个窗口事件(即滚动、单击等)时,所有“hasOwnProperty”实例()' 返回假。例如,我遍历对象 - 使用 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);
4

2 回答 2

4

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

在此处输入图像描述

于 2015-07-31T20:01:55.493 回答
0

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

return newObject;

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

于 2015-07-31T19:09:59.333 回答