JavaScript学习2:面向对象
来源:互联网 发布:pop3和smtp端口被占用 编辑:程序博客网 时间:2024/06/03 13:38
很多人都知道,面向过程和面向对象的软件开发思想,同样我们的JavaScript也具有这两种开发模式。今天我们来看看JavaScript中的面向对象的东西。
面向对象的语言有一个非常重要的特性,那就是类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象,而JavaScript却没有类的概念,但是它有对象,只是此对象非彼对象。
创建对象
<span style="font-size:18px;">//创建对象var person =new Object();person.name='lian';person.age=18;person.run=function(){return this.name+this.age +'奋斗中……';};</span>
这样我们就创建了一个对象,并且为对象创建了属性和方法,在run()方法里的this,就代表person对象本身。这种方法是JavaScript创建对象的最基本的方法,但是我们要向创建一个类似的对象,比如name叫做Lee的,怎么办?那只能重新再写一遍相同的代码喽,你说可以直接将person赋值给person1啊,这样不省事多了么,可是这样做会覆盖掉person对象的属性值的,那你说咋办?
为了解决这个问题,我们可以使用工厂模式,接触过设计模式的小伙伴们应该都知道这是什么玩意。这里不再多说了,直接上代码,看如何实现:
<span style="font-size:18px;">//工厂模式function CreateObject(name,age){var obj =new Object();obj.name=name;obj.age=age;obj.run=function(){return this.name+this.age+'奋斗中……';};return obj;};//创建对象实例var person1 =CreateObject('Lian',18);var person2 =CreateObject('Jack',22);alert(typeof person1); //返回Objectalert(person2 instanceof Object); //返回true</span>
怎么样,是不是解决了重复实例化的问题,但是随之而来的另一个问题是识别问题,什么意思,就是我们根本无法搞清楚他们到底是哪个对象的实例,因为内存中会有两个Object类型的实例对象,你根本不知道哪个是哪个。
那怎么办呢?我们在面向对象的学习中接触过类,那么就一定知道构造函数,也叫做构造方法,这种函数是用来初始化类的。我们可以采用构造函数来创建特定的对象,类似于Object对象。举个例子:
<span style="font-size:18px;">//构造函数方式function Person(name,age){this.name=name;this.age=age;this.run=function(){return this.name+this.age+'吃饭中……';};}var person1=new Person('Lian',100);var person2=new Person('Yang',100);alert(person1 instanceof Person); //返回true,很清楚的告诉我们person1从属于Person</span>
小结:使用构造函数的方法,既解决了重复实例化的问题,又解决了对象识别的问题,他与工厂模式的区别在于:
1没有显式的创建对象(newObject());
2直接将属性和方法赋值给this对象;
3没有return语句
构造函数和普通函数的唯一区别就是他们调用的方式不同。只不过,构造函数也是函数,必须要用new运算符来调用,否则就是普通函数。
- JavaScript学习2:面向对象
- javascript面向对象学习
- javascript面向对象学习
- JavaScript学习-面向对象与原型2
- javascript学习之面向对象
- JavaScript面向对象学习小结
- javaScript学习 面向对象编程
- JavaScript面向对象编程--学习
- javascript 面向对象编程学习
- javascript面向对象学习笔记
- 【JavaScript学习】面向对象的程序设计(2):创建对象
- JavaScript学习笔记2--面向对象编程(更新中)
- JavaScript面向对象编程(2)
- JavaScript面向对象(2)
- JavaScript面向对象(2)
- javascript面向对象编程的学习(基础)
- javascript面向对象学习笔记2010.7.16
- javascript面向对象基础学习(一)
- jsp中include.inc
- oracle instr函数
- 类的静态成量变量必须初始化
- virtualbox下centos挂载共享文件夹
- JavaApk
- JavaScript学习2:面向对象
- js控制浏览器全屏
- Android WebView常见问题及解决方案
- leetcode-35 Search Insert Position
- VS 和 VAssistX 常用快捷键
- Linux设备驱动(二)字符设备
- (2)设计模式之工厂模式
- iOS 使用UITabBarController时需要将一张视图覆盖整个屏幕的解决办法:
- http get post区别