代码重构.对类的所有实例进行操作的方法
code refactoring. Method that operates on all instances of the class
我有一个类构造函数,其主要工作是实例化对象。它获取 ID,检查之前未创建具有此类 ID 的对象并创建它。
function Vehicle(ID){
if (this.listOfVehicles.indexOf(ID) !== -1) throw new Error('Vehicle with such ID already exists');
this.ID = ID;
this.listOfVehicles.push(ID);
this.isMoving = true;
}
对象的原型存储了所有对象 ID 和运行两种方法 - 这使得车辆移动和停止所有,从而停止所有车辆。
Vehicle.prototype = {
'listOfVehicles' : [],
'run' : function(){
this.isMoving = true;
},
'stopAll' : function(){
var vehicleID, i, listOfVehicles = Vehicle.prototype.listOfVehicles;
for(i = 0; i < listOfVehicles.length; i++){
vehicleID = listOfVehicles[i];
vehicles[vehicleID].isMoving = false;
}
}
};
基本上一切都运行良好:
var vehicles = {};
vehicles[3] = new Vehicle(3);
vehicles[6] = new Vehicle(6);
vehicles[12] = new Vehicle(12);
所有车辆都实例化并移动
vehicles[3].stopAll();
所有车辆均未移动
vehicles[3].run();
只有车辆 3 i 移动
有一件事,我不喜欢这里。为了停止所有车辆,我需要使用某些车辆的方法。但是我想不出更好的方法。
您可以定义:
Vehicle.stopAll = function () {
var vehicleID, i, listOfVehicles = Vehicle.prototype.listOfVehicles;
for(i = 0; i < listOfVehicles.length; i++){
vehicleID = listOfVehicles[i];
vehicles[vehicleID].isMoving = false;
}
}
实际上没有什么需要你把这个函数附加到类,你也可以把它定义为:
function stopAllVehicles () {
var vehicleID, i, listOfVehicles = Vehicle.prototype.listOfVehicles;
for(i = 0; i < listOfVehicles.length; i++){
vehicleID = listOfVehicles[i];
vehicles[vehicleID].isMoving = false;
}
}
因为 Javascript 类没有实现信息隐藏(你可以通过将信息包含在函数的局部变量中来自己做到这一点)。
或者,您可以使用原始类定义,并使用Vehicle.prototype.stopAll()
.由于 JS 使用基于原型的 OO,因此始终有一个工具可用于调用该方法。
相关文章:
- 从填充了 AJAX 的下拉列表中获取控制器的操作方法中的值
- 我无法在操作方法中将我的文件传递给 httppostedfilebase
- 操作方法:第一次单击动画 1,第二次单击动画 2
- 为什么我需要使用 document.write 而不是 DOM 操作方法
- Jquery Ajax调用没有't点击操作方法/返回整个HTML页面
- asp.net mvc操作方法发布除json数据之外的数据
- 无法使用angularjs$http请求将参数发送到服务器操作方法
- 在 PHP MVC 中从 Javascript 调用操作方法
- Ajax 发布到 httpost 操作方法,无需刷新特殊加载
- 操作方法确保在不使用 WebFont 加载器的情况下加载@font面
- 时间戳脚本,监视 C 列中的更改,在 E 列 [操作方法] 上设置时间戳
- 如何通过MVC操作方法显示/隐藏HTML按钮
- NodeJS 操作方法需要注入函数的模块
- 如何从用户输入的文本框中从 Html 操作链接控件捕获传递多个值并发送到操作方法
- 无缝路由到不同的控制器/操作方法
- 操作方法:将鼠标悬停在图像上并制作动画绘制一条线,说明淡出
- 通过javascript调用MVC操作方法,但不使用AJAX
- 在操作方法中保存图像,然后将 URL 返回给客户端
- 如何将一个简单的Javascript数组绑定到MVC3控制器操作方法
- 使用Jquery将整个表数据传递给操作方法