JavaScript:修改对象变量的原型?

时间:2011-09-13 03:12:02

标签: javascript object prototype-programming

这是一个对象:

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

我尝试做类似的事情:
obj.prop.prototype["new_attr"] = "some_value";

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以完成您要执行的操作,但需要将prop对象添加到构造函数原型中:

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

答案 2 :(得分:0)

因为prop属性为空。在您能够修改object.prop之前,您需要先将prop初始化为默认值。

请参阅以下参考资料:Extending JavaScript Objects and Classes
Introduction to Object-Oriented JavaScript {
{3}}

HTH。欢呼声。