【问题标题】:Javascript method CalculateCost() Not returning any values for meJavascript方法CalculateCost()不为我返回任何值
【发布时间】:2014-10-05 21:59:48
【问题描述】:

我有一个 .js 文件,其中包含一个名为 PortraitOrder() 的类的构造函数。它有一个名为CalculateCost() 的方法。出于某种原因,当我稍后调用CalculateCost() 方法时,什么也没有发生。

  1. 这里是 PortraitOrder() 和 CalculateCost()

     function PortraitOrder(portrait, copies, size, buyer){
    
                 this.portrait = portrait;
                 this.copies = copies;
                 this.size = size;
                 this.buyer = buyer;
    
                 function CalculateCost(){
    
                 this.size = size;
    
                 this.copies = copies;
    
                 var price;
    
                 if(size == "wallet"){
    
                      price = 10;
    
                 }
                 else if(size == "8x10"){
    
                      price = 10;
    
                 }
                 else if(size == "4x6"){
    
                      price = 10;
    
                 }
                 else if(size == "11x14"){
    
                      price = 30;
    
                 }
                 else{
    
                      price = 10;
    
                 }
    
                 var cost = price * copies;
    
                 return cost;
    
                 }
    
        }
    
  2. 这是我调用方法的方式

         var cost = CalculateCost().toFixed(2);
    
            document.write("Price of Order: " + cost + "<br/>");
    

【问题讨论】:

    标签: javascript methods constructor


    【解决方案1】:

    您似乎遇到了范围界定问题。 CalculateCost() 是在 PortraitOrder() 函数中声明的函数,因此在该函数之外无法访问它。尝试将 CalculateCost() 函数移到 PortraitOrder() 之外,并将所需的变量作为参数传递,如下所示:

    function PortraitOrder() {
      ....
    }
    
    function CalculateCost(price, copies) {
      ....
    }
    

    然后,您可以调用 CalculateCost() 为:

    CalculateCost(price, copies);
    

    如果您确实希望将 CalculateCost() 作为 PortraitOrder() 的一部分使用,您可以通过在变量中保留对它的引用来实现。

    更新:在下面的 cmets 中,您说您希望创建一个包含成员变量和函数的对象。以下是一些有用的链接:

    【讨论】:

    • 不幸的是,这是作业的一部分。我应该把它放在 Portraitorder() 中
    • 啊,你想把它设置为成员函数。您没有在问题中指定这一点(或者至少从您的代码中并不明显)。你可以做 PortraitOrder.prototype.calculateCost = function() { }
    • 哦,好的。如果是这样,我的变量声明是否正确?
    • 是的。我正在用一些链接更新我的答案
    • 嗯。它仍然没有显示任何内容。正如你所说,我将函数更改为原型
    【解决方案2】:

    这不是在 javascript 中定义方法的方式。你应该像这样定义你的函数:

    function PortraitOrder (parameters) {
        //Constructor
    }
    
    PortraitOrder.prototype.calculateCost = function () {
        //Your cost function
    };
    

    此外,可以在此处找到关于 Javascript 中 OOP 的精彩介绍:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多