[英]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.