Javascript 是否可以在js中为对象的新属性添加值?

Javascript 是否可以在js中为对象的新属性添加值?,javascript,object,get,prototype,Javascript,Object,Get,Prototype,在js中,我创建了一个对象。我想在对象的原型中添加一个新属性,并且每个实例的属性都会有所不同。 现在,为了增加价值,我使用了get。但它给了我错误。我在下面添加了代码 我怎样才能完成这件事 我在谷歌上搜索过这个。我所学到的就是通过获取它们为现有财产增值。但我想为新属性增加价值,这将因实例而异 var computer=函数(名称、ram){ this.name=名称; this.ram=ram; }; Object.defineProperty(computer.prototype,“图形”{

在js中,我创建了一个对象。我想在对象的原型中添加一个新属性,并且每个实例的属性都会有所不同。 现在,为了增加价值,我使用了get。但它给了我错误。我在下面添加了代码

我怎样才能完成这件事

我在谷歌上搜索过这个。我所学到的就是通过获取它们为现有财产增值。但我想为新属性增加价值,这将因实例而异

var computer=函数(名称、ram){
this.name=名称;
this.ram=ram;
};
Object.defineProperty(computer.prototype,“图形”{
设置:功能图形(值){
这个图形=值;
},
获取:函数图形(){
返回此.graphic;
},
});
var vio=新电脑(“索尼”,“8gb”);
vio.graphic=“gtx980”;

console.log(vio.graphic)重读您的问题,我将回答实际问题:

当你把东西放在原型上时,它们会在所有实例之间共享(就像你用Java这样的经典语言将它们添加到类中一样)。 当您将内容放在
上时,它们仅可用于特定实例

在不使用setter或getter的情况下,以下工作是有效的:

function Computer(name, ram) { // Please use Capital names for constructors
    this.name = name;
    this.ram = ram;
};

let vio = new Computer('sony', '8gb');
vio.graphic = 'gtx980';
graphic
属性只存在于
vio
中的实例,而不是所有计算机实例

另一方面,如果您要这样做:

function Computer(name, ram) {
  this.name = name;
  this.ram = ram;
}

Computer.prototype.graphic = 'gtx980';

// All instances of Computer will now have a .graphic with the value of 'gtx980'.

出现错误的原因是您为
图形
定义了一个setter,在该setter中,您试图分配给
图形
,该setter调用了
图形
的setter,该setter试图分配给
图形
,该setter调用了。。。。你明白了

解决方案是更改实际变量的名称(例如,更改为
\u graphic

var computer=函数(名称、ram){
this.name=名称;
this.ram=ram;
};
Object.defineProperty(computer.prototype,“图形”{
设置:功能图形(值){
这个。_图形=值;
},
获取:函数图形(){
将此返回。\u图形;
},
});
var vio=新电脑(“索尼”,“8gb”);
vio.graphic=“gtx980”;

console.log(vio.graphic)
但它给了我错误
-我们应该猜测错误是什么吗?您不能将属性getter/setter设置为它自己的名称。使用本地变量,这在原型方法中很烦人,或者获取/设置
this.\u graphic
fron
this.graphic
insteaderror:
堆栈空间外
,显然。在firefox中,递归太多了
-这会使问题更加明显。您可以删除添加属性的所有代码<代码>vio.graphic=“gtx980”就是你所需要的。我能知道背后的理论吗?如果我调用
console.log(Object.getOwnPropertyNames(vio))我得到_graphic而不是graphic作为属性。为什么?因为那是真正的财产。getter和setter不是对象上的实际属性,但底层的
\u图形
是。@zoha131我做了一个编辑来解释实际问题,而不是您尝试的解决方案。