天天看点

JS的面向对象(初学)

首先我要更正一下很多人初学JS时的一个误区:严格来说,js并不属于面向对象,而是基于原型链的语言,更偏向于基于对象但它更加灵活,所以是更偏向于基于对象,为什么这样说呢,是因为面向对象的三大特征:封装、继承、多态,js没有继承这一说,所以也就没有多态这一概念,而且js也没有类的概念,要知道类和对象这是面向对象的精神所在,但是js又可以创建类似于类的东西,而且在最新的ECMA6中,新添进去类这一概念;OK,我们不是来讨论这个的,而是来学习js的面向对象的,下面我举个下例子帮助大家来学习和理解js的面向对象,当然学好面向对象思想不是一天两天的事情.

先给大家打个预防针:没有个两三年的工作经验就不要说自己面向对象学的多好了,好吧,下面正式开始:

1.1. 我们先声明,声明一个对象(js申明一个对象有三种方法)

var person = new Object();
	var person = Object();
	var person = {};
           

1.2. 第二步,我们给声明的对象添加属性/函数(两种方法:1."."点操作;2.字符串的方式添加):

//添加属性
	person.name = "名字";
	person["name"] = "名字";
	//添加函数
	person.showName = function(){
		alert(this.name);
	}
	person['showName'] = function(){
		alert(this.name);
	}

	delete person.name;
	delete person.showName*/
           

2.1. 现在我们学习一下封装是怎么回事: 首先我们还是声明一个对象,然后添加属性方法以及函数;

var person = new Object();
			person.name = "小明";
			person.sex = "男";
			person.showName = function(){
				alert(this.name);
			}
			person.showSex = function(){
				alert(this.sex);
			}
           

2.2 现在我们调用一下

person2.showName();
	person2.showSex();
           

但是这样我们只是创建了一个叫小明的男生,如果想再创建一个叫小花的女生,按照常理则是复制粘贴,但是这样会造成代码冗余,不符合我们程序优化的意义,所以----封装继承的概念由此而来;

3.1 我们把相同的部分,比如name、sex属性因为不确定具体的属性,所以把他们当做参数传递进一个函数里,这样就方便以后的调用了,以后想用了就调用出方法就行了,这就是封装的概念 (注:创建完后最后要把函数当做返回值传出去,这样在外面才能调用到 )

<script>
			/*注:在JS中,我们把可以创建对象的函数,叫做【工厂函数/方法】
				1、原料
				2、加工
				3、出厂
			*/
			//把不确定的值name,sex当做参数传递进一个函数里
			function createPerson(name, sex){
				//1、原料
				var person = new Object(); 
				//2、加工
				person.name = name;
				person.sex = sex;
				person.showName = function(){
					alert(this.name);
				}
				person.showSex = function(){
					alert(this.sex);
				}
				//3、出厂(把函数当做返回值传出去,使得外面能够接收到值)
				return person;
			}
			/*
				【注】我们在这里似乎封装了一个可以创建人的函数。
					我们封装一个可以创建人对象的函数。
			*/
			var p1 = createPerson("小明", '男');
			p1.showName();
			p1.showSex();

			var p2 = createPerson("小花", '女');
			p2.showName();
			p2.showSex();
			
			alert(p1.showName == p2.showName); //fasle
			/*
				1、跟系统创建对象的函数相比,没有new
				2、每一个对象,自己拥有一套函数。浪费资源。
			*/
		</script>
           

对于继承和多态,我们后续继续来学习,在不久的将来喔

看完上面这些你有没有对js的面向对象有所了解呢,学习面向对象思想是一项长久的事情,骚年,要坚持不懈啊。

继续阅读