控制台日志事件对象显示的对象属性与其应有的属性不同
console log event object shows different object properties than it should have
在下面的代码中,我注意到在浏览器控制台中,当我记录事件时,currentTarget
的值为null。但是,当我记录e.currentTarget
时,它会记录一个值。你知道这是怎么回事吗?
var button = document.getElementById("btn");
var eventButtonHandler = function(e) {
var button = e.target;
console.log(e); // logs MouseEvent object with currentTarget:null
console.log(e.currentTarget); // logs a value
if(!button.classList.contains("active"))
button.classList.add("active");
else
button.classList.remove("active");
};
button.addEventListener("click", eventButtonHandler);
jsbin可以在这里找到:http://jsbin.com/xatixa/2/watch?html,js,输出
当您记录对象时,这是Javascript控制台工作方式的一个工件。日志不包含所有对象属性的副本,它只包含对对象的引用。当您单击公开三角形时,它会查找所有属性并显示它们。
在这种情况下,在调用console.log(e)
时,currentTarget
属性中有一个DOM元素。但过了一段时间,由于某种原因,该属性被重置为null
。当您展开event
对象时,您会看到这样的结果。
一个简单的例子说明了这一点:
var foo = { };
for (var i = 0; i < 100; i++) {
foo['longprefix' + i] = i;
}
console.log(foo);
foo.longprefix90 = 'abc';
当您在控制台中查看对象时,您会看到foo.longprefix90
包含"abc"
,尽管在调用console.log(foo)
时它包含90
。
演示需要使用一个具有大量属性的对象。当它进行日志记录时,它会显示适合控制台的前几个属性,因此这些属性在早期快照中。只有在此之后的属性才会显示这种异常行为。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性