如何将原型属性从javascript中的超类委托给子类

时间:2014-06-03 05:36:23

标签: javascript oop object

请帮助我理解以下代码段。

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'?

编辑:基本上我想知道当我们尝试创建一个对象时调用哪个默认构造函数,以及构造函数执行的基本职责是什么?

2 个答案:

答案 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循环中,因为它们不可枚举。默认情况下,可以枚举添加的属性。