gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:50:12 25 4
gpt4 key购买 nike

在js中我创建了一个对象。我想向对象的原型(prototype)添加一个新属性,并且该属性因实例而异。现在为了增加值(value),我使用了get。但这给了我错误。我添加了下面的代码。

我怎样才能完成这件事?

我用谷歌搜索过这个。我所学到的就是通过获得他们为现有属性(property)增加值(value)。但我想为新属性增加值(value),这会因实例而异。

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

Object.defineProperty(computer.prototype, "graphic", {
set: function graphic(value) {
this.graphic = value;
},
get: function graphic() {
return this.graphic;
},
});

var vio = new computer("sony", "8gb");


vio.graphic = "gtx980";

console.log(vio.graphic);

错误消息:

enter image description here

最佳答案

重读您的问题,我将回答实际问题:

当您将内容放在原型(prototype)上时,它们会在所有实例之间共享(就像您使用 Java 等经典语言将它们添加到类中一样)。当您将内容放在 this 上时,它们只能由特定实例访问。

以下工作,没有 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'.
<小时/>

您收到错误的原因是您为 graphic 定义了一个 setter,在其中,您尝试分配给 graphic ,它调用了 setter graphic 试图分配给 graphic ,它调用......你明白了。

解决方案是更改实际变量的名称(例如 _graphic)。

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

Object.defineProperty(computer.prototype, "graphic", {
set: function graphic(value) {
this._graphic = value;
},
get: function graphic() {
return this._graphic;
},
});

var vio = new computer("sony", "8gb");


vio.graphic = "gtx980";

console.log(vio.graphic);

请注意,JS 并没有真正的私有(private)变量。您无法阻止某人更改_graphic

关于javascript - 是否可以在js中为对象的新属性添加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com