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实现 在光标处插入指定内容
May 25 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
jQuery.position()方法获取不到值的安全替换方法
Mar 13 Javascript
JavaScript获取当前url根目录(路径)
Jun 17 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
Vue2 添加数据可视化支持的方法步骤
Jan 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将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php实现分页显示
2015/11/03 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
python实现外卖信息管理系统
2018/01/11 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python numpy中cumsum的用法详解
2019/10/17 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python内打印变量之%和f的实例
2020/02/19 Python
python3爬虫中异步协程的用法
2020/07/10 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
交通事故检查书范文
2014/01/30 职场文书
运动会通讯稿300字
2014/02/02 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
销售队伍口号
2014/06/11 职场文书
环保公益策划方案
2014/08/15 职场文书
营销学习心得体会
2014/09/12 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
房地产项目合作意向书
2015/05/08 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python