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'

});


至尊宝的传说
浏览 813回答 1
1回答

守候你守候我

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});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript