js--面向对象分析实例
2023-09-27 14:26:50 时间
- 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊
- 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python系列课程
需求
某停车场,分3层,每层100车位
每个车位都能监控到车辆的驶入和离开
车辆进入前,显示每层的空余车位数量
车辆进入时,摄像头可识别车牌号和时间
车辆出来时,出口显示器显示车牌号和停车时长
代码
class Car {
constructor(num) {
this.num = num
}
}
class Camera {
shot(car) {
return {
num: car.num,
inTime: Date.now()
}
}
}
class Screen {
show(car, inTime) {
console.log('车牌号:', car.num);
console.log('停车时间:', Date.now() - inTime);
}
}
class Park {
constructor(floors = []) {
this.floors = floors;
this.Camera = new Camera();
this.Screen = new Screen();
this.carList = []
}
in(car) {
const info = this.Camera.shot(car);
let i = parseInt(Math.random()) * 100
let place = this.floors[0].places[i];
place.in();
info.place=place
this.carList[car.num] = info;
}
out(car) {
const info = this.carList[car.num];
let place=info.place;
place.out();
this.Screen.show(car, info.inTime)
delete this.carList[car.num]
}
emptyNum() {
return this.floors.map(item => {
return `${item.index}层还有${item.emptyPlaceNum()}停车位`
}).join('\n')
}
}
class Floor {
constructor(index, places = []) {
this.index = index;//第几层
this.places = places;//停车位
}
emptyPlaceNum() {
let index = 0;
this.places.forEach(item => {
if (item.isEmpty) {
index++
}
})
return index
}
}
class Place {
constructor() {
this.isEmpty = true;
}
in() {
this.isEmpty = false
}
out() {
this.isEmpty = true
}
}
let floors = [];
for (let i = 0; i < 3; i++) {
let places = [];
for (let j = 0; j < 100; j++) {
places[j] = new Place()
}
floors[i] = new Floor(i + 1, places)
}
let park = new Park(floors);
let car1 = new Car(100)
let car2 = new Car(200)
let car3 = new Car(300)
console.log("第一辆车进入")
console.log(park.emptyNum())
park.in(car1);
console.log("第二辆车进入")
console.log(park.emptyNum())
park.in(car2);
console.log("第三辆车进入")
console.log(park.emptyNum())
park.in(car3);
console.log("第一辆车离开")
park.out(car1);
console.log("第二辆车离开")
park.out(car2);
console.log("第三辆车进入")
console.log(park.emptyNum())
park.in(car3);
console.log("第三辆车离开")
park.out(car3);
console.log(park.emptyNum())
相关文章
- [转] node.js下mongoose简单操作实例
- JS JSOP跨域请求实例详解
- 【Javascript/Vue】如何解决js中超链接跳转到新的页面不被浏览器拦截?(已解决,代码实例,亲测有效)
- Js、Jquery获得字符串变量的长度函数实例!
- JS leetcode 买卖股票的最佳时机 题解分析,我离职了。
- JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程
- jquery.form.js实现将form提交转为ajax方式提交的方法
- js选项卡
- js设置控件的隐藏与显示的两种方法
- download.js (实例3)下载
- vue引入外部js数据
- 关于js函数,方法,对象实例的一些说明
- 2014第3周三JS进阶书籍
- Three.js 与 Python 语法 (PyWeb3D)
- 【手撕代码系列】JS手写实现防抖函数
- Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)
- jQuery全屏滚动插件FullPage.js中文API文档
- 关于URL编码/javascript/js url 编码/url的三个js编码函数
- js网页滚动条滚动事件实例分析
- 有趣的HTML实例(十五) 注册登录界面(css+js)
- 有趣的HTML实例(十二) 早安、晚安动画(css+js)
- jQuery全屏滚动插件fullPage.js
- 鸿蒙开发实例 | ArkUI JS飞机大战游戏开发
- js打开新的窗口
- JavaScript经典实例之分页(简单易用)原生js封装分页(一次性数据)
- 【曹操】【js-sequence-diagrams】前端js绘制时序图