Javascript 关于创建getter的构造函数函数与工厂函数
我尝试使用这两种方法创建getter -工厂功能Javascript 关于创建getter的构造函数函数与工厂函数,javascript,Javascript,我尝试使用这两种方法创建getter -工厂功能 function CreateCircle(radius) { return { radius, get area() { return this.radius * 20; } } } -和构造函数 function ConstructorFunctionCircle(radius) { this.radius = radius; this.area = () =&g
function CreateCircle(radius) {
return {
radius,
get area() {
return this.radius * 20;
}
}
}
-和构造函数
function ConstructorFunctionCircle(radius) {
this.radius = radius;
this.area = () => this.radius * 20;
}
然后我创建了对象,并将该区域记录在控制台中:
const constructorFunctionCircle = new ConstructorFunctionCircle(20);
const factoryFunctionCircle = CreateCircle(20);
console.log(`factoryFunctionCircle ${factoryFunctionCircle.area}`);
console.log(`constructorFunctionCircle ${constructorFunctionCircle.area}`);
结果是:
factoryFunctionCircle 400
constructorFunctionCircle () => this.radius * 20
因此,我理解,对于构造函数,我应该使用()调用一个方法
那么,如何使用构造函数创建getter属性呢 对于实构造函数,必须使用defineProperty
:
function ConstructorFunctionCircle(radius) {
this.radius = radius;
Object.defineProperty(this, "area", {
get: function() {
return radius * 20;
}
});
}
但是,我更喜欢上课:
class Circle {
constructor(radius) {
this.radius = radius;
}
get area() {
return 2 * Math.PI * this.radius ** 2;
}
}
对于实构造函数,您必须使用defineProperty
:
function ConstructorFunctionCircle(radius) {
this.radius = radius;
Object.defineProperty(this, "area", {
get: function() {
return radius * 20;
}
});
}
但是,我更喜欢上课:
class Circle {
constructor(radius) {
this.radius = radius;
}
get area() {
return 2 * Math.PI * this.radius ** 2;
}
}
您可以这样定义另一个函数(本例中为lambda): 然后让您的原始属性调用该函数:
this.area = this.calculateArea();
但是类肯定是更好的选择。您可以定义另一个函数(本例中为lambda),如下所示: 然后让您的原始属性调用该函数:
this.area = this.calculateArea();
但是一个类肯定是更好的选择