2011-09-13 117 views
2

这里是一个对象:JavaScript:修改对象变量的原型?

var obj = new function(){ 
    this.prop = {}; 
} 

,我尝试做一些事情,如:
obj.prop.prototype["new_attr"] = "some_value";

我想怎么办,被永久修改obj.prop以包含新的属性。根据我的理解,所有“对象”都有原型,但JavaScript告诉我prop没有原型。

也许我采取了错误的方法(试图永久修改prop),但我至少想知道为什么上面的代码不起作用。

回答

6

通常,您从构造函数访问prototype对象,但是你可以从它一个对象,但不使用.prototype

获取对象原型对象的非官方方式(不支持在所有浏览器中)使用__proto__属性。 (我相信它在支持(编辑)它的浏览器中已被弃用)。

获取对象的原型对象的官方ECMAScript 5方法(在所有浏览器中都不支持)是使用Object.getPrototypeOf()

在你的情况下,.prop引用了一个对象文字,所以你已经知道原型是Object.prototype

Object.getPrototypeOf({}) === Object.prototype; // true 

请注意,扩展Object.prototype几乎总是一个坏主意。


“也许我采取了错误的方式(在试图永久地修改道具),但我至少想知道为什么上面的代码是行不通的。”

如果你只是想修改由.prop引用的对象,然后简单地做:

obj.prop.new_attr = "some_value"; 
1

你可以完成你正在尝试做的,但你需要的道具对象添加到构造函数原型:

var Obj = function() {}; 

Obj.prototype.prop = { bar: 'bar value' }; 

var obj_1 = new Obj(); 

console.log(obj_1.prop.bar); //bar value 

obj_1.prop.foo = 'foo value'; 

var obj_2 = new Obj(); 

console.log(obj_2.prop.foo); //foo value