在js中我创建了一个对象。我想在对象的原型中添加一个新属性,属性将不同于实例。 现在为了增加价值,我使用获取。但它给了我错误。我已添加以下代码。
我怎样才能完成这件事?
我用Google搜索了这个。我所学到的只是通过获取,它们为现有属性增加了价值。但我想为新属性增加值,这会使实例与实例不同。
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);

错误按摩:
答案 0 :(得分:1)
重读你的问题,我会回答实际问题:
当你把东西放在原型上时,它们在所有实例之间共享(就好像你用Java这样的经典语言将它们添加到类中)。
当你把东西放在this
上时,它们只能用于特定的实例。
以下作品,没有制定者或吸气者:
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
调用graphic
的setter 1}}试图分配给调用的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并不真正拥有私有变量。您无法阻止某人更改_graphic
。