在Javascript函数

时间:2018-01-19 01:03:16

标签: javascript function

以下是我遇到的问题的简化示例。



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?

4 个答案:

答案 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))