JS之面向对象1
今天学习了JS的面向对象部分内容。首先是理解面向对象的概念,因为之前在学校学的几门编程语言都有接触面向对象这个概念,所以理解起来相对来说还是比较容易的。面向对象只关注对象提供的功能,不关注其内部细节,就像我们使用收音机时不需要知道收音机里面的构造以及连线方式,而只需要知道收音机各个按钮的功能即可,收音机就是一个对象。面向对象具有三个特性:封装,继承,多态,并且由方法和属性组成。这些大都已经记在心中了,考过好几次了。
接着就是学会用工厂方式构造对象,分为三步:
- 工厂制作产品首先需要的是原料,对应的我们需要创建一个空白的对象;
1
var obj=new Object();
- 对原料进行加工,即对应的我们需要为对象添加属性和方法;
1
2
3
4
5
6
7
8
9
10obj.name=name;
obj.sex=sex;
obj.showName=function()
{
alert('我的名字叫'+this.name);
}
obj.showSex=function()
{
alert('我是'+this.sex+'的');
} - 将加工好的产品送出厂,所以我们需要返回对象。
1
return obj;
虽然工厂方式看起来挺完美的,但是还是存在两个问题:其一,没有new;其二,函数重复定义,即每个对象都有一套自己的函数,浪费资源。问题一解决相对来说比较简单,添加一个new即可,主要还是问题二的解决。问题二可以用原型prototype为对象添加方法,原型prototype又是今天新学到的一个概念,通过原型添加方法可以在已有对象中加入自己的方法,可以扩展系统对象,添加一些本不支持的方法。用原型添加方法不仅给构造函数于极度的简化,而且使所有同类的对象都只有一套方法,节省了大量的资源,有效地解决了工厂方法的第二个问题。所以对上述的工厂方法进行改进,首先是将原来的构造函数删除部分,再将剩下的关于属性的部分稍微修改成如下形式:
1 | function Person(name,sex)//构造函数,添加属性 |
接着就是解决问题一了,加new,如下:
1 | var p=new Person('Rose','女'); |
然后就是解决问题二了,用原型为对象添加方法:
1 | Person.prototype.showName=function()//原型,添加方法 |
最后,调用方法即可,这样子一来,一套相对比较完美的构造对象方法就出炉了。
1 | p.showName(); |
以上就是今天主要学到的三方面的内容:面向对象概念,工厂方法构造对象,原型添加方法。原型为对象添加方法真的很好用,今天学到的可能只是一小部分,更多的需要后期接触再去深入学习了。