我想首先说我了解 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
变量的方法,然后发现 usingvar
而不是this
essential 使得它在constructor
.能够定义允许我这样做的 getter 和 setter。
现在终于到了我的问题,对长时间的结束感到抱歉。对于经验丰富的 JavaScript 程序员的最佳实践,您是让所有变量private
都遵循其他 OOP 语言的标准,并设置 getter 和 setter(不能为每个 Object 强制创建原型),还是尽可能避免它们,因为this
关键字基本上可以让您获取和设置您想要的所有内容,并且仅private
用于对课程所需的一些内部数据进行硬编码?
感谢您花时间阅读本文并参与讨论,我真的只是想了解经验丰富的 Web 开发人员用作最佳实践的标准。