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
没有原型.
What I'd like to do, is permanently modify obj.prop
to contain the new attributes. From what I understood, all "Objects" had the prototype, but JavaScript is telling me prop
doesn't have prototype.
也许我采取了错误的方法(试图永久修改 prop
),但我至少想知道为什么上面的代码不起作用.
Maybe I'm taking the wrong approach (in trying to permanently modify prop
), but I'd at least like to know why the code above doesn't work.
推荐答案
通常您可以从构造函数中访问 prototype
对象,但您也可以从对象中获取它,但不能使用 <代码>.prototype.
Typically you access the prototype
object from the constructor function, but you can get it from an object as well, but not using .prototype
.
获取对象原型对象的非官方方式(并非所有浏览器都支持)是使用 __proto__
属性.(我相信它在支持(编辑)它的浏览器中已被弃用.
The unofficial way (not supported in all browsers) to get the prototype object of an object is with the __proto__
property. (I believe it is deprecated in the browsers that support(ed) it).
官方 ECMAScript 5 获取对象原型对象的方式(也并非所有浏览器都支持)是使用 Object.getPrototypeOf()
.
The official ECMAScript 5 way (also not supported in all browsers) to get the prototype object of an object is to use Object.getPrototypeOf()
.
在你的例子中 .prop
引用了一个对象文字,所以你已经知道原型是 Object.prototype
.
In your case .prop
is referencing an object literal, so you already know that the prototype is Object.prototype
.
Object.getPrototypeOf( {} ) === Object.prototype; // true
请注意,扩展 Object.prototype
几乎总是一个坏主意.
Note that it is almost always a bad idea to extend Object.prototype
.
也许我采取了错误的方法(试图永久修改道具),但我至少想知道为什么上面的代码不起作用."
如果您只是想修改 .prop
引用的对象,那么只需执行以下操作:
If you're just trying to modify the object referenced by .prop
, then simply do:
obj.prop.new_attr = "some_value";
这篇关于JavaScript:修改对象变量的原型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!