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 相关文章推荐
js给dropdownlist添加选项的小例子
Mar 04 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
基于jQuery实现仿51job城市选择功能实例代码
Mar 02 Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 Javascript
javascript 判断是否是微信浏览器的方法
Oct 09 Javascript
Angularjs之filter过滤器(推荐)
Nov 27 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
简单实现bootstrap导航效果
Feb 07 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
vue-cli axios请求方式及跨域处理问题
Mar 28 Javascript
vue.js响应式原理解析与实现
Jun 22 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
Zend Guard使用指南及问题处理
2015/01/07 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
javascript import css实例代码
2008/07/18 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
花卉与景观设计系大学生求职信
2013/10/01 职场文书
医院辞职信范文
2014/01/17 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
园艺师求职信
2014/04/27 职场文书
医院见习总结
2015/06/24 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python