我正在尝试改进我的Javascript基础,以便我可以探索客户端框架(Knockout,Angular等)并在学习Node.js方面取得进展。
我在教授C#时遇到了一个简单的问题,我正试图用Javascript解决它。
问题
创建具有可能性百分比内部值的概率对象。例如,将使用以下内容创建2/5概率:
var firstOne = new Probability(40); // 2/5 is a 40% chance
不应通过实例变量访问该内部状态。概率函数/对象的目的是封装将一个与另一个进行比较的能力:
var secondOne = new Probability(30);
var areTheyEqual = firstOne.SameAs(secondOne); // returns false in this example
在C#中,这是相对简单的。概率值存储在具有私有范围的成员变量中,而SameAs函数是公共范围。因为每个实例使用相同的类型,概率,C#的范围允许调用成员也“看到”传递的成员的私有状态:
// C#
public class Probability
{
private int _value;
public Probability(int percent)
{
_value = percent;
}
public bool SameAs(Probability other)
{
return this._value == other._value; // works even though _value is private
}
}
我想知道是否可以使用Javascript实现这种封装。作为第二个问题,也许我正在尝试做的是从C#和OO的角度来看,Javascript可以提供替代方法来解决利用Javascript功能的问题。我对两种类型的回应持开放态度。
答案 0 :(得分:0)
您可以使用JavaScript闭包来接近您在其他面向对象语言中使用的内容,例如:类似的东西:
function Probability() {
// private field
var _value = 0;
this.getValue = function() {
return _value;
};
this.setValue = function(newValue) {
_value = newValue;
};
this.sameAs = function(compare) {
return _value === compare.getValue();
};
}
var probability = new Probability();
probability.setValue(10);
var newProbability= new Probability();
newProbability.setValue(11);
console.log(probability.sameAs(newProbability)); // false
newProbability.setValue(10);
console.log(probability.sameAs(newProbability)); // true
在谷歌搜索面向对象的JavaScript时,你可以找到很多参考资料,我可以推荐this site