以下是我遇到的问题的简化示例。
function Part(price, qty) {
this.price = price;
this.qty = qty;
this.value = function() {
return this.price * this.qty
}
}
var fancyPart = new Part(2, 3);
console.log(fancyPart.value)

我希望将6
打印到控制台,而不是打印:
function () {
return this.price * this.qty
}
为什么会这样?
我正在尝试使用它来创建一个"对象"并且正在阅读关于这个问题的各种方法:Which way is best for creating an object in javascript? is "var" necessary before variable of object?
答案 0 :(得分:1)
您可以使用类语法并将 value 添加为getter:
class Part {
constructor (price, qty) {
this.price = price;
this.qty = qty;
};
// Implement value as a getter
get value() {
return this.price * this.qty
};
}
var fancyPart = new Part(2, 3);
// No need for parameter list
console.log(fancyPart.value)

答案 1 :(得分:0)
尝试console.log(fancyPart.value())...
来调用(调用)函数
function Part(price, qty) {
this.price = price;
this.qty = qty;
this.value = function() {
return this.price * this.qty
}
}
var fancyPart = new Part(2, 3);
console.log(fancyPart.value())
答案 2 :(得分:0)
您可以从构造函数中将值指定为函数
this.value = function(){ 返回this.price * this.qty }
因此,当您尝试记录fancyPart.value时,实际上是在记录函数而不是它的调用。
如果你在值之后为“()”,你将实际调用该函数并得到你期望的评估(即fancypants.value的情况下即为6)
答案 3 :(得分:0)
或者您可以与众不同并使用Function.prototype.call
function Part(price, qty) {
this.price = price;
this.qty = qty;
this.value = function() {
return this.price * this.qty
}
}
var fancyPart = new Part(2, 3);
console.log(fancyPart.value.call(fancyPart))