如何从自定义方法获取信息并将其应用到我的构造函数javascript中的另一个方法?

如何从自定义方法获取信息并将其应用到我的构造函数javascript中的另一个方法?,javascript,Javascript,好的,我试着想出一个很好的例子,所以我创建了一个关于贵金属的构造函数。建造师采用金属类型和重量。我有两种方法。一种方法确定贵金属(金或银)是否真实,另一种方法根据现货价格计算价值。(我知道现货价格是错误的,这只是一个例子) 假设一位顾客带来了一件80%的银币。因为它是80%的银,我想把它应用到我的metalValue方法中。我该怎么做呢 这是代码。(JSFiddle为您提供了方便)。 这将帮助我更好地理解构造函数 HTML 现在我意识到我可以这样做: document.getElementByI

好的,我试着想出一个很好的例子,所以我创建了一个关于贵金属的构造函数。建造师采用金属类型和重量。我有两种方法。一种方法确定贵金属(金或银)是否真实,另一种方法根据现货价格计算价值。(我知道现货价格是错误的,这只是一个例子)

假设一位顾客带来了一件80%的银币。因为它是80%的银,我想把它应用到我的metalValue方法中。我该怎么做呢

这是代码。(JSFiddle为您提供了方便)。 这将帮助我更好地理解构造函数

HTML

现在我意识到我可以这样做:

document.getElementById('testDiv2').innerHTML = customerCindy.metalValue() * customerCindy.authentic("brown");

然而,这里的目标是从真实方法中获取信息,并使用这些信息来帮助我计算metalValue方法中的金属值

如果您想在构造函数中保持这两个方法的逻辑独立,可以包含第三个方法来执行将两个结果相乘的任务

var PreciousMetals = function(metal, weight){
    this.metal = metal;
    this.weight = weight;  //weight in ounces

    this.authentic = function(colorTest){
        var metalPurity;
        var zero = "";
        if (this.metal == "silver"){
            switch(colorTest){
                case "brightred":
                    metalPurity = 1;
                    break;
                case "darkred":
                    metalPurity = 0.925;
                    break;
                case "brown":
                    metalPurity = 0.80;
                    break;
                case "green":
                    metalPurity = 0.50;
                    break;
                default:
                    metalPurity = 0;
            }


        }else if(this.metal == "gold"){
           switch(colorTest){
                case "green":
                    metalPurity = "base metal or gold plated";
                    break;
                case "milk colored":
                    metalPurity = "gold plated sterling silver";
                    break;
                case "no color":
                    metalPurity = "real gold";
                    break;
                default:
                    metalPurity = "Could be a fake, try different test";
            }
        }
        return metalPurity;
    }

    this.metalValue = function(){
        var sum = 0;
        var spotPrice;
        if (this.metal == "gold"){
           spotPrice = 1000;
        }else if(this.metal == "silver"){
           spotPrice = 15;
        }
        sum = spotPrice * this.weight;
        return sum;        
    }

    this.netValue = function(colorTest){
        return this.authentic(colorTest) * this.metalValue();    
    }
}

这里有一个正在运行的JSFIDLE-

如果您想更新
metalValue
以包含纯度检查的结果,您可以只更新

this.metalValue = function(colorTest){
    // ...
    sum = spotPrice * this.weight * this.authentic(colorTest);
    return sum;        
}
并称之为

customerCindy.metalValue('brown');

因为这只是一个例子,没有理由担心它,但假设真实世界中的纯度与金属和重量一样是一个实例属性,对于这样的方法来说,实际上不会是一个瞬时值。但是这不是这里也不是那里。

我也可以将构造函数重写到只需要一个方法的地方,并获得所需的结果,不过我只是想知道是否可以将一个方法的结果应用到另一个方法。如果我必须创建一个这样的程序,我会用一种方法来完成所有这些,但这并不能回答问题。是的,这就是我想的,我也想过类似的事情。因此,我想可能不可能将一个方法的结果应用到另一个方法中;但是您仍然需要修改this.metalValue,类似于下面Scott的建议,如下所示:this.metalValue=函数(纯度){var sum=0;var spotPrice;if(this.metal==“gold”){spotPrice=1000;}else if(this.metal==“silver”){spotPrice=15;}sum=spotPrice*this.weight*purity;return sum;}jsidle对于这种在方法之间传递值的不太理想的解决方案:它不太理想,因为在存储为实例属性的内容和作为方法参数传递的内容方面有奇怪的设计选择。这些方法相互调用的方式没有什么特别奇怪的。我意识到Scott对于现实世界来说是个糟糕的例子,哈哈,对不起。我只是想找一个好的,我想这就是我能想到的。不过谢谢,效果很好。
this.metalValue = function(colorTest){
    // ...
    sum = spotPrice * this.weight * this.authentic(colorTest);
    return sum;        
}
customerCindy.metalValue('brown');