javascript - for-in输出

查看:89
本文介绍了javascript - for-in输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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'
});

解决方案

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
    });

这篇关于javascript - for-in输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆