javascript 面向对象实战思想分享


Posted in Javascript onSeptember 07, 2017

一直以来,很多新手都会经常问,我学完了基础知识,如何做项目?平时在公司工作都是做些什么?其实我想说,只要你找对方法,随便打开一个网站,都能是你的项目。

这里指的面向对象不单单适用于javascript,也适用其他语言。
万物皆对象,所以,任何事物都是有特征(属性)和动作(方法)的,一般拿到一份需求分档,或者你浏览一个网页看到一个画面的时候,脑子里就要有提炼出来的属性和方法的能力,那你才是合格的。

例如一个购物车例子

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模块化的历程也有点搭边,我还希望大家在浏览任何网页的时候,去分析一下,这个模块你来设计,你会怎么设计,能做到解耦和,版本可迭代可维护,利于团队开发吗?

如有不对,请指正

Javascript 相关文章推荐
jquery怎样实现ajax联动框(一)
Mar 08 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
Nov 22 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
记录一次完整的react hooks实践
Mar 11 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
基于javascript实现移动端轮播图效果
Dec 21 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
Sep 07 #Javascript
用js实现before和after伪类的样式修改的示例代码
Sep 07 #Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 #Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 #Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 #Javascript
阿里大于短信验证码node koa2的实现代码(最新)
Sep 07 #Javascript
bootstrap-table组合表头的实现方法
Sep 07 #Javascript
You might like
php gd等比例缩放压缩图片函数
2016/06/12 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
基于python 处理中文路径的终极解决方法
2018/04/12 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
Python3+Appium安装使用教程
2019/07/05 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python查看数据类型的方法
2019/10/12 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
加拿大时装零售商:Influence U
2018/12/22 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
经贸日语专业个人求职信范文
2013/12/28 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
教育技术职业规划范文
2014/03/04 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript