02_JS面向对象
2017-09-10 本文已影响0人
对方不想理你并向你抛出一个异常
知识点
- 面向对象的概念
- 面向对象编程举例
- 设置页面中的div和p的边框为
1px solid red
- 创建一个 div 标签, 并设置其样式, 加入页面中
面向对象的基本概念
面向过程和面向对象的对比
Example 1:洗衣服
面向过程的思维方式:
step 1:收拾脏衣服
step 2:打开洗衣机盖
step 3:将脏衣服放进去
step 4:设定洗衣程序
step 5:开始洗衣服
step 6:打开洗衣机盖子
step 7:晒衣服
面向对象的思维方式:
洗衣机需要什么对象?
女朋友
洗衣机
在面向对象的思维方式中:我们只关心要完成事情需要的对象。
总结:面向对象是一种解决问题的思路,一种编程思想。
对象是什么呢?
万物皆对象
JavaScript中的对象是什么?
在JavaScript中,所谓的对象,就是键值对的集合。
比如要描述一个人,这个人有name
,age
,gender
,体现在代码中:
{ name:"张三", age:18, gender:"Male" }
比如要做一个学生管理系统,那学生就是要设计的对象,学生拥有name
,age
,gender
,address
,phone
,体现在代码中:
{ name:"刘亦菲", age:18, gender:"female", address:"上海", phone:"110" }
总结
- 面向过程关注的实现功能的步骤,是如何把功能拆解后一步步的实现
- 面向对象则是关注的实现功能的一系列的对象
面向对象编程举例
设置页面中的div和p的边框为1px solid red
传统的处理办法
// 任务需求:
// 1> 获取div标签
var divs = document.getElementsByTagName( 'div' );
// 2> 遍历获取到的div标签
for(var i = 0; i < divs.length; i++) {
//3> 获取到每一个div元素,设置div的样式
divs[i].style.border = "1px dotted black";
}
// 4> 获取p标签
var ps = document.getElementsByTagName("p");
// 5> 遍历获取到的p标签
for(var j = 0; j < ps.length; j++) {
// 获取到每一个div元素 设置p标签的样式
ps[j].style.border = "1px dotted black";
}
使用函数进行封装优化
// 通过标签名字来获取页面中的元素
function tag(tagName) {
// var dvs = document.getElementsByTagName(tagName);
// return dvs;
return document.getElementsByTagName(tagName);
}
// 封装一个设置样式的函数
function setStyle(arr) {
for(var i = 0; i < arr.length; i++) {
// 获取到每一个div元素
arr[i].style.border = "1px solid #abc";
}
}
var dvs = tag("div");
var ps = tag("p");
setStyle(dvs);
setStyle(ps);
使用面向对象的方式
// 更好的做法:是将功能相近的代码放到一起
var itcast = {
getEle: {
tag: function (tagName) {
return document.getElementsByTagName(tagName);
},
id: function (idName) {
return document.getElementById(idName);
}
},
setCss: {
setStyle: function (arr) {
for(var i = 0; i < arr.length; i++) {
arr[i].style.border = "1px solid #abc";
}
},
css: function() {},
addClass: function() {},
removeClass: function() {}
// ...
}
// 属性操作模块
// 动画模块
// 事件模块
// ...
};
var divs = itcast.getEle.tag();
itcast.setCss.setStyle(divs);
创建一个 div 标签, 并设置其样式, 加入页面中
传统的处理办法
<script type="text/javascript">
//创建一个 div 标签, 并设置其样式, 加入页面中
//面向过程的思维方式
//1. 创建div
var div = document.createElement("div");
//2. 设置div样式
div.style.border = "1px solid #c0c0c0";
div.style.width = "400px";
div.style.height = "300px";
//3. 添加div到body中去
document.body.appendChild(div);
</script>
Jquery方式
也是面向对象的方式
$("body").append("<div style='border: 1px solid red; width: 400px; height: 300px;'></div>");
使用面向对象的方式
// 面向对象的方式去思考:
// 1, 抽取对象( 名词提炼法 ): div, body
// 2, 分析属性与方法( 动词提炼 ): 加到, 设置样式
var divTag = new DivTag(); // 内部应该创建 dom 对象
// 构造函数内部应该创建 dom 对象 div, 同时将其设置为属性
// 需要一个 div 的构造函数
function DivTag() {
this.DOM = document.createElement( 'div' );
this.__加到 = function ( node ) {
// 需要将 this.DOM 加到 node 中
node.appendChild( this.DOM );
};
this.__设置样式 = function ( name, value ) {
// 设置 this.DOM 的样式
this.DOM.style[ name ] = value;
};
}
var divTag = new DivTag();
divTag.__设置样式( 'border', '1px solid red' );
divTag.__设置样式( 'width', '400px' );
divTag.__设置样式( 'height', '100px' );
divTag.__设置样式( 'backgroundColor', 'pink' );
例:
<script type="text/javascript">
//使用函数将代码封装,使得复用性更高
//使用函数封装带来的问题:
//1.全局变量污染
//2.代码结构不够清晰,维护不方便
//使用对象进行封装后的优势
//1.暴露在全局的只有一个对象名 不会造成全局变量污染
//2.使用对象将代码进行功能模块的划分,有利于日后的维护
//设置页面中的div和p的边框为1px solid red
//面向过程的方式
function tag(tagName){
return document.getElementsByTagName(tagName);
}
function setStyle(elements){
for (var i = 0; i < elements.length; i++) {
var obj = elements[i];
obj.style.border = "1px solid red";
}
}
setStyle(tag("div"));
setStyle(tag("p"));
//面向对象的方式
var MJquery = {
//获取dom元素的方法放入一个对象中
getElement:{
tag: function(tagName){
return document.getElementsByTagName(tagName);
},
id: function (id) {
return document.getElementById(id);
}
},
//设置样式的方法放入一个对象中
setCss:{
setStyle: function (elements) {
for (var i = 0; i < elements.length; i++) {
var obj = elements[i];
obj.style.border = "1px solid red";
}
},
css: function (option) {
},
addClass: function () {
}
},
//事件处理模块
dealEvent:{
addEvent: function () {
}
}
};
</script>