javascript 面向对象实战思想分享
发布时间 - 2026-01-11 03:09:31 点击率:次一直以来,很多新手都会经常问,我学完了基础知识,如何做项目?平时在公司工作都是做些什么?其实我想说,只要你找对方法,随便打开一个网站,都能是你的项目。

这里指的面向对象不单单适用于javascript,也适用其他语言。
万物皆对象,所以,任何事物都是有特征(属性)和动作(方法)的,一般拿到一份需求分档,或者你浏览一个网页看到一个画面的时候,脑子里就要有提炼出来的属性和方法的能力,那你才是合格的。
例如一个购物车例子
估计很多人都做过购物车,我就不卖关子,做任何东西,先宏观思考*,然后再去处理细节,然后组装起来,就好像组装汽车的道理一样。例如上图,红色的就是属性,黄色的就是方法,抽象出属性和方法,其他都是死的。
假如是刚学前端的同学,可能就会用这种全局化的变量,也叫面向函数编程,缺点就是很乱,代码冗余
//商品属性
var name = 'macbook pro'
var description = ''。'
var price = 0;
//商品方法
addOne:funcion(){alert('增加一件商品')},
reduceOne:function(){alert('减少一件商品')},
//购物车属性
var card = ['macbook pro' ,'dell']
var sum = 2,
var allPrice = 22000,
//购物车方法
function addToCart:function(){
alert('添加到购物车')
}
addToCart()
假如是单例模式的思想,可能会这样做,但这样还是不太好。对象太多,可能造成变量重复,项目小还可以接受
var product={
name:'macbook pro',
description:'',
price:6660,
addOne:funcion(){},
reduceOne:function(){},
addToCart:function(){
alert('添加到购物车')
}
}
/*购物车*/
var cart={
name:'购物车',
products:[],
allPrice:5000,
sum:0
}
假如是有一定经验的人,可能会这样子做。
function Product(name,price,des) {
/*属性 行为 可以为空或者给默认值*/
this.name = name;
this.price = price;
this.description = des;
}
Product.prototype={
addToCart:function(){
alert('添加到购物车')
}
addOne:funcion(){},
reduceOne:function(){},
/*绑定元素*/
bindDom:function(){
//在这里进行字符串拼接,
//例如
var str = ''
str +='<div>价格是:'+this.privce+'</div>'
return str
},
}
function Card(products,allPrice,sum) {
/*属性 行为 可以为空或者给默认值*/
this.products = products;
this.allPrice = allPrice;
this.sum = sum
}
Product.prototype={
getAllPrice:function(){
alert('计算购物车内商品总价')
}
}
通过创建各种对象例如macbook
//后台给的数据
var products= [
{name:'macbook',price:21888},
{name:'dell',price:63999}
]
var str = ''
for(var i = 0,len=products.length;i<len;i++) {
var curName = products[i].name
var curName = new Product()
curName.name=products[i].name;
curName.price=products[i].price;
str+= curName.bindDom()
}
上面这种方式,就降低了耦合性,不管你用什么语言,还是任何javascript框架(模板引擎,jquery,react等),都是脱离不开上面那段代码的思想,
再来说说,现在mvvm的模式,例如vue,他们不需要获取dom,那么渲染的时候,定义好一个一个的组件就行了。属性全部用{{}}定义好,剩下的就是替换模板,就解决了。
data:{
name ='',
price='',
description = ''
},
methods:{
addToCart:function(){
alert('添加到购物车')
}
addOne:funcion(){},
reduceOne:function(){},
}
然后page级组件引入这个产品组件,然后循环这个产品组件就好了。
组件化的好处
将代码分类管理
代码清晰
容易维护
容易发现问题
代码可读性好
易于团队化协作
当然这篇文章是为了锻炼抽象化思维的能力,虽然跟javascript模块化的历程也有点搭边,我还希望大家在浏览任何网页的时候,去分析一下,这个模块你来设计,你会怎么设计,能做到解耦和,版本可迭代可维护,利于团队开发吗?
如有不对,请指正
# js面向对象
# 实战思想
# 购物车
# 都是
# 为空
# 默认值
# 的人
# 我就
# 在这里
# 我还
# 太多
# 还可以
# 是有
# 才是
# 你会
# 不需要
# 如有
# 都能
# 要有
# 很多人
# 适用于
# 有一定
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel如何创建自定义Artisan命令?(代码示例)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在万网利用已有域名快速建站?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel怎么调用外部API_Laravel Http Client客户端使用
Python图片处理进阶教程_Pillow滤镜与图像增强
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
如何快速生成ASP一键建站模板并优化安全性?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
深入理解Android中的xmlns:tools属性
原生JS实现图片轮播切换效果
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何自定义分页视图?(Pagination示例)
EditPlus中的正则表达式 实战(2)
详解Android中Activity的四大启动模式实验简述
如何破解联通资金短缺导致的基站建设难题?
如何有效防御Web建站篡改攻击?
如何为不同团队 ID 动态生成多个独立按钮
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
黑客入侵网站服务器的常见手法有哪些?
微信小程序 input输入框控件详解及实例(多种示例)
简单实现Android文件上传
如何快速搭建自助建站会员专属系统?
PHP正则匹配日期和时间(时间戳转换)的实例代码
制作企业网站建设方案,怎样建设一个公司网站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
想要更高端的建设网站,这些原则一定要坚持!
如何在Windows 2008云服务器安全搭建网站?
如何用西部建站助手快速创建专业网站?
北京网站制作公司哪家好一点,北京租房网站有哪些?
Python正则表达式进阶教程_复杂匹配与分组替换解析
Laravel如何使用查询构建器?(Query Builder高级用法)
青岛网站建设如何选择本地服务器?
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
SQL查询语句优化的实用方法总结
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
js实现获取鼠标当前的位置
如何自定义建站之星网站的导航菜单样式?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】

