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自定义关机画面设置【工具】