更新:2012.06.26 - 在我原来的问题下面看到我的结论。
我试图弄清楚为什么这个简单的代码没有正确初始化。是的,我来自 Java 世界,我也是一个“纯粹主义者”,并且想正确地使用 JavaScript。
许多(如果不是全部)会建议声明以“this”关键字为前缀的变量,从而在不使用适当的 setter 和 getter 函数的情况下公开所有这些变量。对我来说,这是不可接受的,并且不反映良好的 OOP 实践。他们说 JavaScript 是一种 OOP 语言,那么为什么人们总是试图绕过这个我永远无法理解的语言!?但这不是问题,所以让我们继续...
以下代码的问题是,当我在 Chrome 中运行它时,它一直告诉我:
Uncaught ReferenceError: x is not defined
我可以创建一个接受默认值的构造函数,但我宁愿不公开默认值应该是那些构造对象的人(这也不是好的做法)。此外,在运行时,将调用 setter 方法来更改特定实例的“x”和“y”值。一次有许多“模型”实例可用!
所以这里是简单的代码:
function Model() {
var x = 3;
var y = 'hello';
}
Model.prototype.getX = function() {
return x;
}
Model.prototype.getY = function() {
return y;
}
Model.prototype.setX = function(myX) {
x = myX;
}
Model.prototype.setY = function(myY) {
y = myY;
}
var model = new Model();
console.log("Model Y = '" + model.getY() + "'");
console.log("Model X = " + model.getX());
console.log("Model Y = '" + model.getY() + "'");
谢谢你的帮助...
问题的结论(更新于 2012.06.26):
很容易得出结论,所请求的(恰好是这么简单的事情)不能用 JavaScript 完成!
令我惊讶的是,从下面的答案中可以看出,有些人会争辩说,既然 JavaScript 不支持它,那么你不应该需要它或使用它。哇,这真的太棒了!
多年来,我一直认为 JavaScript 不是 OOP 语言,这个简单的问题(及其答案)可以证明这一点。
所以最后它讨论了我承认失败,你和我都需要将我们的代码更改为对所有班级成员使用“this”关键字。再一次,语言控制程序员,而不是程序员控制语言!他们想知道为什么每年有超过 2/3 的软件项目失败!?