OOP是面向对象编程(Object Oriented Programming)。集于一身,最终目的是各司其职,让每个职责的只关注自己那块,其他的不管丢给下一个人。比如说,一个页面,对于客户,只要能看到漂亮的页面即可;对页面设计师,只要关注页面图片的设计即可;对于前端工程师,只需要关注页面实现即可;对于后台工程师,只要关注交互的数据即可。

    我是前端开发,我就针对于前端的OOP再细分分析下。对于html页面,如果仅仅只是展示,只要知道页面url即可;对于样式设计,只要添加css文件url即可;对于动态效果,只要添加js文件url即可。到这里为止,是不是发现我们都只要知道下一个的入口就可以了。那我把这个再带入到js文件中,我想要实现一个功能,这里用jquery框架。
        1.给一个按钮添加一个点击事件,并且输出一句话。
        首先,我就应该想实现它需要做哪些准备?对于DOM的处理,是不是需要在标签都存在了才能得到对象?也就是我们所说的加载完成后处理。加载完成后,我就想是不是可以直接添加事件了?如果在有n多的事件监听情况下,难道要在文件中平铺n个事件监听?那样会不会到最后自己也不知道是谁是谁了?如果这样不方便,那我还是按照功能模块区分,如下所示:

html中

    <div class="container">
<div>
<button class="btn">点我</button>
</div>
<div class="content1"></div>
<div class="content2"></div>
</div>
js中
        var testObject = {
init: function(){
this._btnEvent();
},
_btnEvent: function(){
$(".btn").click(function(){
console.log("我是click!");
})
$(".btn").mouseover(function(){
console.log("我是mouseover!");
})
$(".btn").mouseout(function(){
console.log("我是mouseout!");
})
}
} $(function(){
testObject.init();
})

  这样有没有感觉稍显清晰?同一个模块的事件放在同一个方法体下,易于管理,看起来也舒服些。

  2.接下来我想实现点击按钮后,给一个模块填充内容。

          var testObject = {
init: function(){
this._btnEvent();
},
_btnEvent: function(){
$(".btn").click(function(){
var arr = [
"我是item1",
"我是item2",
"我是item3"
];
var p = "";
for(var i = 0, len = arr.length; i < len; i++){
p += "<p>"+arr[i]+"</p>";
}
$(".content").append(p);
})
}
} $(function(){
testObject.init();
})

感觉看着还成,因为代码少,不会有多少影响。如果我还给另一个模块增加内容。

var testObject = {
init: function(){
this._btnEvent();
},
_btnEvent: function(){
$(".btn").click(function(){
var arr1 = [
"我是item1",
"我是item2",
"我是item3"
];
var p = "";
for(var i = 0, len = arr1.length; i < len; i++){
p += "<p>"+arr1[i]+"</p>";
}
$(".content1").append(p); var arr2 = [
"我是模块1",
"我是模块2"
];
var div = "";
for(var i = 0, len = arr2.length; i < len; i++){
div += "<div>"+arr2[i]+"</div>";
}
$(".content2").append(div);
})
}
} $(function(){
testObject.init();
})

这个看起来是不是有点多了?如果我想再添加一个功能。。。连续性功能的平铺,会让人看着累,找一个内容要找半天,更不易于管理。为了避免不要这么累,我做以下操作。

var testObject = {
init: function(){
this._btnEvent();
},
_btnEvent: function(){
$(".btn").click(function(){
// 功能1入口
addTest1();
// 功能2入口
addTest2();
})
$(".btn").mouseover(function(){
// console.log("我是mouseover!");
})
$(".btn").mouseout(function(){
// console.log("我是mouseout!");
})
}
} function addTest1(){
var arr1 = [
"我是item1",
"我是item2",
"我是item3"
];
var p = "";
for(var i = 0, len = arr1.length; i < len; i++){
p += "<p>"+arr1[i]+"</p>";
}
// 如果还要添加其他功能的操做,还可以添加其他方法
// becomeMan();
// ...
$(".content1").append(p);
} function addTest2(){
var arr2 = [
"我是模块1",
"我是模块2"
];
var div = "";
for(var i = 0, len = arr2.length; i < len; i++){
div += "<div>"+arr2[i]+"</div>";
}
$(".content2").append(div);
} $(function(){
testObject.init();
})

  这样看起来是不是舒服多了?我还可以在方法体中,再开辟新的方法,互不影响,看着代码也整洁美观些。

  综上所述,在一个方法体最好只处理一个功能,不要把多个功能蹂在一起。牢记,要各司其职。

  如果有讲的不好或者不对的方法,欢迎拍砖。

OOP感想的更多相关文章

  1. oop作业二—circle

    oop作业-circle 题目描述 编写一个程序,要求根据给定的圆的半径求圆的面积,并将求得的结果打印出来. 要求: 输入输出采用cin和cout. 建立一个工程,将程序写成两个.cpp和一个.h的形 ...

  2. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  3. c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】

    字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...

  4. 一个简单oop的changeTab

    好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...

  5. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  6. OOP,WEB开发实用小技巧

    偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...

  7. 从OOP的角度看Golang

    资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=tou ...

  8. Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)

    <iframe src="http://channel9.msdn.com/Series/MVA-China/Web20140611A01/player?h=540&w=960 ...

  9. 玩转JavaScript OOP[2]——类的实现

    概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...

随机推荐

  1. php 如何造一个简短原始的数据库类用来增加工作效率

    class DBDA{ public $host="localhost"; public $uid="root"; public $pwd="123& ...

  2. JQuery------动态添加的元素on方法不起作用解决方法

    转载: http://www.jb51.net/article/70342.htm

  3. maven学习讲解

    参考链接:http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html 1.前言 Maven,发音是[`meivin],"专家 ...

  4. Tengine 常用模块使用介绍

    Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...

  5. Numerical Optimization: Understanding L-BFGS

    http://aria42.com/blog/2014/12/understanding-lbfgs/ Numerical optimization is at the core of much of ...

  6. JSON FX

    https://github.com/mckamey/jsonfx-v1#svn/trunk/JsonFx/JsonFx.Json

  7. C# WinForm中将Form显示在Panel中(C#)

    信息来自:http://blog.csdn.net/renyouprince/article/details/4136176 当我们在做WinForm的程序时,总是要弹出一些窗体,但弹出窗体看起来效果 ...

  8. 未能加载文件或程序集“MySQLDriverCS

    未能加载文件或程序集“MySQLDriverCS, Version=3.0.1735.36021, Culture=neutral, PublicKeyToken=172f94dfb0faf263”或 ...

  9. 程序日志输出实现-Log4j

    学习开发的过程中,我们都应该用过System.out.println():来做一些调试工作,有时候确实很有用有没有.但是这种简单粗暴的方式让程序中到处存在着sysout.这种方式难免会有性能的影响,维 ...

  10. Python开发【第十五篇】:Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...