我正在阅读this article有关尝试在JavaScript中模仿OOP的危险,其中包括以下内容:
我是否正确假设,假定采用这种方法,我们应该替换以下代码:
function Rabbit() {
this.speed = 3;
}
Rabbit.prototype = {
this.getSpeed = function() {
return this.speed;
}
}
var rabbit = new Rabbit();
有了这个:
function RabbitFactory() {
var rabbit = {
speed: 3
};
Object.setPrototypeOf(rabbit, {
getSpeed: function() {
return this.speed;
}
})
return rabbit;
}
var rabbit = RabbitFactory();
最佳答案
不,那是错的。您不应该使用Object.setPrototypeOf
,最好使用Object.create
(尽管它对结果没有影响)。而且,如果您每次都使用对象文字创建原型(prototype),那么它将失去所有共享优势,因此您应该完全删除该原型(prototype)或将其移到函数外以使其静态。编写工厂函数的正确方法是
const protoRabbit = {
getSpeed: function() {
return this.speed;
}
};
function createRabbit() {
var rabbit = Object.create(protoRabbit);
rabbit.speed = 3;
return rabbit;
}
var rabbit = createRabbit();