【发布时间】:2012-12-05 14:57:39
【问题描述】:
首先我想说的是,我了解 JavaScript 是一种无类语言。我的背景是 Java、C++ 和 Objective-C,它们都是支持类的经典 OOP 语言。
我正在扩展 Web 开发,并一直在尝试使用 JavaScript 并学习其模式。现在我正在使用在 JavaScript 中模拟类的构造函数模式。
所以这是我的“练习”课:
function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
var privateVarTest = 10;
this.getPrivateVarTest = function() {
return privateVarTest;
}
this.setPrivateVarTest = function( value ) {
privateVarTest = value;
}
}
Car.prototype.toString = function() {
return this.model + " is a " + this.year + " model and has " +
this.miles + " miles.";
}
var myCar = new Car( "Ford Focus", "2006", "65,000" );
document.getElementById('notepad').innerHTML += '</br> Testing </br>';
document.getElementById('notepad').innerHTML += myCar.toString() + '</br>';
document.getElementById('notepad').innerHTML += myCar.model + '</br>';
document.getElementById('notepad').innerHTML += myCar.getPrivateVarTest() + '</br>';
myCar.setPrivateVarTest( 20 );
document.getElementById('notepad').innerHTML += myCar.getPrivateVarTest() + '</br>';
现在我喜欢使用prototype 定义函数的方式,因为它不会为每个创建的Car 对象实例化新版本的函数。但是,在经典的 OOP 语言中,我们将变量设为 private 并创建 public 函数/方法来根据需要设置和获取这些变量。
JavaScript 是无类的,没有 private 或 public 关键字用于此用途,所以我想我会尝试一种“伪造”private 变量的方法,然后发现使用 @987654329 @ 而不是 this 基本使它在 constructor 之外无法访问,但我能够定义允许我这样做的 getter 和 setter。
现在终于要回答我的问题了,很抱歉拖了这么久。对于经验丰富的 JavaScript 程序员的最佳实践,您是否会使所有变量 private 遵循其他 OOP 语言的标准,并设置 getter 和 setter(不能为每个 Object 强制创建原型),或者尽可能避免使用它们可能,因为this 关键字基本上可以让你获取和设置你想要的一切,并且只使用private 对类所需的一些内部数据进行硬编码?
感谢您抽出时间阅读本文并参与讨论,我真的只是想了解经验丰富的 Web 开发人员用作最佳实践的标准。
【问题讨论】:
标签: javascript oop class coding-style web-standards