Javascript 是否更改构造函数';创建其实例后的属性是否会影响实例?如果是的话,怎么办?
假设这是构造函数:Javascript 是否更改构造函数';创建其实例后的属性是否会影响实例?如果是的话,怎么办?,javascript,oop,Javascript,Oop,假设这是构造函数: var Bike = function (speed) { this.speed = speed; }; 以下是创建的实例: var suzuki = new Bike(500); var hayabusa = new Bike(550); var honda = new Bike(400); 现在,我想做的是将所有自行车的速度更改为600 这可以通过逐个更改每个对象的属性来实现: suzuki.speed = 600; hayabusa.speed = 600; h
var Bike = function (speed) {
this.speed = speed;
};
以下是创建的实例:
var suzuki = new Bike(500);
var hayabusa = new Bike(550);
var honda = new Bike(400);
现在,我想做的是将所有自行车的速度更改为600
这可以通过逐个更改每个对象的属性来实现:
suzuki.speed = 600;
hayabusa.speed = 600;
honda.speed = 600;
不能通过改变类的属性来改变它吗
Bike.speed = 600;
新自行车(编号)。速度是实例变量
Bike.speed
将是“类”(对象)变量
这两个完全不同,彼此没有影响。你不能这样做。您可以做的是稍后更改原型。但是,这将仅影响未定义该属性的实例:
var Bike = function(speed){
if(speed) {
this.speed = speed;
}
};
Bike.prototype.speed = 100;
var suzuki = new Bike(500);
var hayabusa = new Bike();
var honda = new Bike();
console.log(suzuki.speed); //500
console.log(hayabusa.speed); //100
console.log(honda.speed); //100
Bike.prototype.speed = 200;
console.log(suzuki.speed); //500
console.log(hayabusa.speed); //200
console.log(honda.speed); //200
更改所有实例的唯一方法实际上是更改所有实例。但是,您可以在设置属性时保存日期,以及原型属性上的日期,并定义执行所需操作的getter:
var Bike = function(speed){
Object.defineProperty(this, 'speed', {
get() {
if(this.speedMoment && this.speedMoment > Bike.speedMoment) {
return this._speed;
} else {
return Bike._speed;
}
},
set(val) {
Bike._speedMomentIter++;
this.speedMoment = Bike._speedMomentIter;
this._speed = val;
}
});
if(speed) {
this.speed = speed;
}
};
Bike._speedMomentIter = 0;
Object.defineProperty(Bike, 'speed', {
set(val) {
Bike._speedMomentIter++;
this.speedMoment = Bike._speedMomentIter;
this._speed = val;
}
});
Bike.speed = 100;
var suzuki = new Bike(500);
var hayabusa = new Bike(800);
var honda = new Bike();
console.log(suzuki.speed); //500
console.log(hayabusa.speed); //800
console.log(honda.speed); //100
Bike.speed = 200;
console.log(suzuki.speed); //200
console.log(hayabusa.speed); //200
console.log(honda.speed); //200
谢谢你能告诉我上述问题的最佳解决方案吗?我应该骑新自行车吗(数字)。速度=600;或者有其他的最佳方法?你应该继续你的计划。使用var bike\u name=新自行车(速度)
和设置每一个速度你的问题如果能做到,应该通过自己测试来回答。当你发现不能这样做,如果你的问题是“为什么”,那是因为语言的设计不允许这样做,谢天谢地。实际上我自己测试过。它不起作用。我是新来的。所以我想也许还有其他方法可以达到这个目的。这就是为什么最后的问题标题是“如果是,那么如何”。答案显然是否定的。一个更具说明性的问题是如何实现这样的目标。这就是我想要的答案。谢谢