Javascript hasOwnProperty 在 Event 对象上总是 false?
Javascript hasOwnProperty always false on Event objects?
我希望有人能帮助阐明与事件对象相关的 hasOwnProperty() 方法。
我正在尝试克隆鼠标事件(最终此对象将传递给 iframe)
我已经构建了一个 'clone' 函数 - 但每当我尝试克隆一个 window 事件(即滚动、单击等)时,所有 'hasOwnProperty()' return 的实例都是错误的。
例如,我遍历对象 - 使用 hasOwnProperty() 进行检查 - 每个 属性 都是 returning 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);
您创建了一个名为 newObject
的对象,但您 return 编辑了一个名为 newNode
的对象,您从未对其定义或添加任何内容。尝试将您的 return 语句更改为:
return newObject;
我认为这将为您提供一个具有事件本身所具有的某些属性的对象。
您的假设是正确的 - e
参数是一个空心的 new MouseEvent
对象,没有自己的属性,只有从原型链 MouseEvent<-UIEvent<-Event
继承的属性。这是继承关系图:
我希望有人能帮助阐明与事件对象相关的 hasOwnProperty() 方法。
我正在尝试克隆鼠标事件(最终此对象将传递给 iframe) 我已经构建了一个 'clone' 函数 - 但每当我尝试克隆一个 window 事件(即滚动、单击等)时,所有 'hasOwnProperty()' return 的实例都是错误的。 例如,我遍历对象 - 使用 hasOwnProperty() 进行检查 - 每个 属性 都是 returning 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);
您创建了一个名为 newObject
的对象,但您 return 编辑了一个名为 newNode
的对象,您从未对其定义或添加任何内容。尝试将您的 return 语句更改为:
return newObject;
我认为这将为您提供一个具有事件本身所具有的某些属性的对象。
您的假设是正确的 - e
参数是一个空心的 new MouseEvent
对象,没有自己的属性,只有从原型链 MouseEvent<-UIEvent<-Event
继承的属性。这是继承关系图: