请帮助我理解以下代码段。
var ob = {a:20,b:30};
Object.prototype.c = '40';
for (var x in ob){
console.log(x); // will log a,b,c in console
}
var keys = Object.keys(ob) ;
console.log(keys); // will log a,b in console
我的问题是,如何将属性'c'放在'对象'的原型上将使它可用于'ob'?
编辑:基本上我想知道当我们尝试创建一个对象时调用哪个默认构造函数,以及构造函数执行的基本职责是什么?
答案 0 :(得分:1)
Object.keys()方法返回给定对象自己的可枚举属性的数组,区别在于 for-in 循环枚举原型链中的属性同样,Object.keys(ob)
只会枚举ob属性,而不是ob prototype
<强> Object Properties 强>
Object.prototype.constructor
- &gt; 指定创建的函数 对象的原型。
Object.prototype.__proto__
- &gt; 指向对象 当对象被实例化时,它被用作原型。
Object.prototype.__noSuchMethod__
- &gt; 允许定义函数 将未定义的对象成员作为a调用时执行 方法
答案 1 :(得分:1)
对象文字({}
)将从Object.prototype
继承。
Object.prototype.c = '40';
在c
的原型上设置了Object
属性,因此从Object
继承的所有对象都可以访问此属性。 Object
原型上定义的任何属性都可以从继承自它的对象上访问。
for (var x in ob)
和Object.keys(ob)
之间的区别在于Object.keys(ob)
将仅返回ob
对象的属性,而for (var x in ob)
将遍历原型链并且在c
的原型上找到Object
属性。
默认情况下,Object
原型上定义的属性不会包含在for-in循环中,因为它们不可枚举。默认情况下,可以枚举添加的属性。