所以我有自己的Bicycle
构造函数(简单示例):
function Bicycle (wheels, steer) {
this.wheels = 2 + wheels;
this.steer = wheels/steer;
}
Bicycle.prototype = {
steer: function () {
// do something
},
replace: function () {
var bicycles = generateRandomBicycles();
bicycles.sort(function (a, b) {
return b.score - a.score;
});
this = bicycles[0];
}
};
注意replace
功能。我正在做类似的事情,但我实际上运行的是一种小型遗传算法,应该用更好的自行车代替现有的自行车。
我知道我可以这样做:
this.wheels = bicycles[0].wheels;
this.steer = bicycles[0].steer;
但有没有更明智的方法可以做到这一点?使用this = x
会导致错误Parsing error: Assigning to rvalue
。
答案 0 :(得分:1)
您无法重新分配this
。正如@pointy在评论中指出的那样,你可以创建一个返回新自行车的函数:
function Bicycle (wheels, steer) {
this.wheels = 2 + wheels;
this.steer = wheels/steer;
}
Bicycle.prototype.replace = function () {
var bicycles = generateRandomBicycles();
bicycles.sort(function (a, b) {
return b.score - a.score;
});
return bicycles[0];
};
const bike1 = new Bicycle(2, 1);
const bike2 = bike1.replace();
您可以将新实例分配给同一个变量:
let bike = new Bicycle(2, 1);
bike = bike.replace();
答案 1 :(得分:0)
@destroyer答案很好,应该这样做。但是以我问的方式回答我的问题,我最终做到了这一点:
replace: function () {
var bicycles = generateRandomBicycles();
bicycles.sort(function (a, b) {
return b.score - a.score;
});
for (var i in bicycles[0]) {
this[i] = bicycles[0][i];
}
}
基本上复制所有属性。在这个for循环中使用hasOwnProperty
也是值得的。