JavaScript教程(十五)JavaScript面向对象编程

一.JavaScript 面向对象编程

1.什么是面向对象编程
面向对象是一种解决问题的思路,一种编程思想.
2.面向过程和面向对象的对比
在这里给大家举个洗衣服的例子
面向过程的思维方式:
step 1:收拾脏衣服
step 2:打开洗衣机盖
step 3:将脏衣服放进去
step 4:设定洗衣程序
step 5:开始洗衣服
step 6:打开洗衣机盖子
step 7:晒衣服
而面向对象的思维方式:
洗衣机需要什么对象?
女朋友
洗衣机

在面向对象的思维方式中:我们只关心要完成事情需要的对象。
总结:面向对象是一种解决问题的思路,一种编程思想.
3.对象是什么?JavaScript 中的对象又是什么?
万事万物都是对象 .
在 JavaScript 中,所谓的对象,就是键值对的集合.
属性和方法是什么?
比如要描述一个人,这个人有 name,age,job,体现在代码中:

{ name:"张三", age:18, job:"Programe" }

比如要做一个学生管理系统,那学生就是要设计的对象,学生拥有 name,age,gender,address,phone,体现在代码中:

{ name:"刘亦菲", age:18, gender:"female", address:"上海", phone:"110" }

总结:
面向过程关注的实现功能的步骤,是如何把功能拆解后一步步的实现
面向对象则是关注的实现功能的一系列的对象

二、面向对象编程案例

eg:设置div的样式
(1)传统的方式

<body>
	<div id="div1" ></div>
	<br />
	<p id="p1"></p>
</body>
.....................
<script type="text/javascript">
	window.onload=function(){
		var div1=document.getElementById('div1');//获取页面元素
		var p1=document.getElementById('p1');
		div1.style.width=200+'px';
		div1.style.height=200+'px';
		div1.style.background='green'
		p1.style.width=200+'px';
		p1.style.height=100+'px';
		p1.style.background='pink';
	}

(2)函数的方式

<body>
	<div id="div1"></div>
	<div id="div2"></div>
	<p id="p1"></p>
	<p id="p2"></p>
</body>
......................
<script type="text/javascript">
	window.onload=function(){
		//函数主要起到封装的作用,以及优化程序
		//定义一个函数  用来封装 获取页面元素的程序
		function tagName(tagNames){
			return document.getElementsByTagName(tagNames);
		}
		function  byId(Byids){
			return document.getElementById(Byids);
		}
		var div_01=tagName('div');
		//alert(div_01);//输出结果[object HTMLCollection]为一个集合
		var p1=tagName('p');
		//alert(p1);//输出结果为[object HTMLCollection]返回结果为一个集合
		//通过id获取 元素
		var div1=byld('div1');//返回div元素
		//alert(div1);//[object HTMLDivElement]
		//通过以上发现  样式也可以封装
		function styLe(arr){//传递元素进入到函数从而设置样式
			for(i=0;i<arr.length;i++){
				//假设现在div大小和p大小是一样的
				arr[i].style.width=200+'px';
				arr[i].style.height=200+'px';
				if(arr==div_01){
					if(i==0){
						arr[i].style.background='yellow';
					}else{
						arr[i].style.background='red';
					}
					
				}else{
					if(i==0){
						arr[i].style.background='pink';
					}else{
						arr[i].style.background='green';
						arr[i].style.borderRadius=50+'%';
					}
				}
			}
		}
		styLe(div_01);
		styLe(p1);
	}	
</script>

(3)使用面向对象的方式

<body>
	<div id="div1" class="div_01"></div>
	<div id="div2"class="div_01"></div>
	<div id="div3"class="div_01"></div>
	<div id="div4"class="div_01"></div>
</body>
............
<script type="text/javascript">
	window.onload=function(){
		var inlett={
			//对获取页面元素的方式进行封装
			getele:{//将功能相同封装到一起
				id:function(ids){ //表示形参
					return document.getElementById(ids);
				},
				tag:function(tags){
					return document.getElementById(tags);
				},
				clas:function(cla){
					return document.getElementsByClassName(cla);
				}
			},
			//对样式进行封装
			Style:{
				sleltcss:function(arr){//arr有可能是集合,也有可能是单个元素
					//(1)传递单个的元素进入该函数设置样式
					//alert(arr.length); //undefined
					if(arr.length==undefined){
						arr.style.width=200+'px';
						arr.style.height=200+'px';
						if(arr==div1){
							arr.style.background='red';
						}else{
							arr.style.borderRadius=50+'%';
						}
					}else{
						//(2)传递一个集合进入到该函数设置样式
						for (var i=0;i<arr.length;i++) {
							arr[i].style.width=200+'px';
							arr[i].style.height=200+'px';
							if(i==0){
								arr[i].style.background='red';
							}else if(i==1){
								arr[i].style.background='blue';
							}else if(i==2){
								arr[i].style.background='pink';
							}else{
								arr[i].style.background='yellow';
							}
							
						}
					}
				}
			}
		}
		var div1=inlett.getele.id('div1');
		inlett.Style.sleltcss(div1);
		var div2=inlett.getele.id('div2');
		inlett.Style.sleltcss(div2);
		var div3=inlett.getele.id('div3');
		inlett.Style.sleltcss(div3);
		var div4=inlett.getele.id('div4');
		inlett.Style.sleltcss(div4);
		var div5=inlett.getele.clas('div_01');
		inlett.Style.sleltcss(div5);
		var div6=inlett.getele.tag('div');
		inlett.Style.sleltcss(div6);
	}
</script>

基于 Object 对象(object是所有对象的父类)

var person = new Object(); //创建一个空对象
person.name = 'My Name';//给对象添加属性
 person.age = 18;
 person.getName = function(){
  	return this.name;
  }

三、面向对象的三大特征(封装/继承/多态)

    在进入正题前,先了解传统的面向对象编程(例如 Java)中常会 涉及到的概念,大致可以包括:
类:定义对象的特征。它是对象的属性和方法的模板定义。
对象(或称实例):类的一个实例.
属性:对象的特征,比如颜色、尺寸等。
方法:对象的行为,比如行走、说话等.
构造函数:对象初始化的瞬间被调用的方法。
继承:子类可以继承父类的特征。例如,猫继承了动物的一般特性。
封装:一种把数据和相关的方法绑定在一起使用的方法。
抽象:结合复杂的继承、方法、属性的对象能够模拟现实的模型。
多态:不同的类可以定义相同的方法或属性。
    在 JavaScript 的面向对象编程中大体也包括这些。不过在称呼 上可能稍有不同,例如,JavaScript 中没有原生的“类”的概念, 而只有对象的概念。因此,随着你认识的深入,我们会混用对象、实 例、构造函数等概念。
对象(类)的创建
    在 JavaScript 中,我们通常可以使用构造函数来创建特定类型的对
象。诸如 Object 和 Array 这样的原生构造函数,在运行时会自动 出现在执行环境中。此外,我们也可以创建自定义的构造函数。
封装性 (优点:减少代码的冗余,优化代码,可以重复 使用功能相同的代码,安全性,只有当前的对象才可以访问,为了后期的可维护性以及程序的可重用性)
对象是将数据与功能组合到一起, 即封装
(1)js 对象就是 键值对的集合
键值如果是数据( 基本数据, 复合数据, 空数据 ), 就称为属性
如果键值是函数, 那么就称为方法
(2)对象就是将属性与方法封装起来
(3)方法是将过程封装起来
继承性
所谓继承就是自己没有, 别人有,拿过来为自己所用, 并成为自己的东西
传统继承基于模板(子类可以使用从父类继承的属性和方法)
即:让某个类型的对象获得另一个类型的对象的属性的方法

js 继承基于对象
在 JavaScript 中,继承就是当前对象可以使用其他对象的方法和属性.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆皮没有豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值