JavaScript:修改对象的原型';什么是变量?

JavaScript:修改对象的原型';什么是变量?,javascript,object,prototype-programming,Javascript,Object,Prototype Programming,这是一个对象: var obj = new function(){ this.prop = {}; } 我试着做这样的事情: obj.prop.prototype[“新属性”]=“某些值” 我想做的是永久性地修改obj.prop以包含新属性。据我所知,所有“对象”都有原型,但JavaScript告诉我prop没有原型 也许我采取了错误的方法(试图永久修改prop),但我至少想知道为什么上面的代码不起作用。你可以完成你想做的事情,但你需要将prop对象添加到构造函数原型中: var Ob

这是一个对象:

var obj = new function(){
    this.prop = {};
}
我试着做这样的事情:
obj.prop.prototype[“新属性”]=“某些值”

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


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

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

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

Object.getPrototypeOf( {} ) === Object.prototype;  // true
获取对象的原型对象的非官方方式(并非所有浏览器都支持)是使用
\uuu proto\uu
属性。(我相信在支持它的浏览器中,它是不推荐的)

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

在您的例子中,
.prop
引用了一个对象文本,因此您已经知道原型是
object.prototype

Object.getPrototypeOf( {} ) === Object.prototype;  // true
请注意,扩展
Object.prototype
几乎总是一个坏主意

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

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

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

obj.prop.new_attr = "some_value";

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

请参阅以下参考资料:

嗯。干杯