Javascript方法CalculateCost()不为我返回任何值

时间:2014-10-05 21:59:48

标签: javascript methods constructor

我有一个.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/>");
    

2 个答案:

答案 0 :(得分:1)

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

function PortraitOrder() {
  ....
}

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

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

CalculateCost(price, copies);

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

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

答案 1 :(得分:1)

这不是在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