var oDome = document.getElementById('dome');Object.prototype.move = function(json){ for(var key in json){ console.log(key) //为什么输出的是 width,height,move ? //不是应该只有width,height吗? } console.log(json)};oDome.move({ 'width':'200px', 'height':'300px'});
1 回答

守候你守候我
TA贡献1802条经验 获得超10个赞
for…in
以任意序迭代一个对象的可枚举属性。
循环将迭代对象的所有可枚举属性和从它的构造函数的 prototype 继承而来的(包括被覆盖的内建属性)。
在你的例子中,move
属性在Object
构造函数的原型里面,而所有对象都是Object
的实例,所以枚举任何一个对象的属性都会看到它。
解决方法有两个——
使用
hasOwnProperty
方法,检验属性是否是其本身所含有的for(var key in json){ if(json.hasOwnProperty(key)) { console.log(key); } }
将
move
的属性设置为不可枚举Object.defineProperty(Object.prototype, "move", { enumerable: false});
添加回答
举报
0/150
提交
取消