JavaScript:修改对象变量的原型? [英] JavaScript: modify prototype of an object's variable?

查看:93
本文介绍了JavaScript:修改对象变量的原型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个对象:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆