繁体   English   中英

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

[英]JavaScript: modify prototype of an object's variable?

这是一个对象:

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

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

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

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

通常,您可以从构造函数访问prototype对象,但是也可以从对象中获取prototype对象,但不使用.prototype

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

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

在您的情况下, .prop引用的是对象常量,因此您已经知道原型为Object.prototype

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

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


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

如果您只是想修改.prop引用的对象,则只需执行以下操作:

obj.prop.new_attr = "some_value";

您可以完成您想做的事情,但需要将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

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

请参阅以下参考: 扩展JavaScript对象和类
面向对象的JavaScript简介
JavaScript的重新介绍

HTH。 干杯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM