为了账号安全,请及时绑定邮箱和手机立即绑定

for-in输出

for-in输出

至尊宝的传说 2018-09-07 13:20:55
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的实例,所以枚举任何一个对象的属性都会看到它。

解决方法有两个——

  1. 使用hasOwnProperty方法,检验属性是否是其本身所含有的

    for(var key in json){    if(json.hasOwnProperty(key)) {        console.log(key);
        }
    }
  2. move的属性设置为不可枚举


    Object.defineProperty(Object.prototype, "move", {    enumerable: false});


查看完整回答
反对 回复 2018-10-28
  • 1 回答
  • 0 关注
  • 812 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号