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 相关文章推荐
用javascript实现画板的代码
Sep 05 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
setTimeout的延时为0时多个浏览器的区别
May 23 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
Vue实现百度下拉提示搜索功能
Jun 21 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 Javascript
vscode中使用npm安装babel的方法
Aug 02 Javascript
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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
php中session退出登陆问题
2014/02/27 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
php文件上传类的分享
2017/07/06 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
python基础教程之Filter使用方法
2017/01/17 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
什么是Remote Module
2016/06/10 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
外贸英语毕业生自荐信
2013/11/14 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
政风行风整改报告
2014/11/06 职场文书
讲座通知范文
2015/04/23 职场文书
离婚答辩状范文
2015/05/22 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
python微信智能AI机器人实现多种支付方式
2022/04/12 Python