面向对象编程
-
面向对象编程的特点
- 抽象:抓住核心问题(把一样的放在一起)
- 封装:只能通过对象来访问方法(避免乱用代码)
- 继承:从已有对象上继承出新的对象
- 多态:多对象的不同形态
-
对象的组成
-
方法(行为、操作)——对象下面的函数叫做对象的方法
-
属性——对象下面的变量叫做对象的属性
-
例:最简单的面向对象
-
//var obj = {};
-
var obj = new Object();//创建了一个空对象
-
obj.name = '小明';//对象下面的变量是对象的属性
-
obj.showName = function(){//对象下面的函数是对象的方法
- alert(obj.name);
-
}
-
obj.showName();
-
-
工厂方式:
-
面向对象中的封装函数
-
-
改成与系统对象类似的写法
-
首字母大写
-
new关键字提取
-
this指向为新创建的对象
-
所以上面的代码改为
-
-
这里我们需要知道一个概念:构造函数—用来创建对象的函数,叫做构造函数(new后面调用的函数叫做构造函数)
-
当new去调用一个函数,这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this(隐式返回)
-
我们知道p1.showName和p2.showName其实都是
-
-
这其实就涉及到了,对象的引用问题,因为虽然他们的值相同,但引用不同(也即内存地址不同),所以结果自然也是不同的。(如果你对对象的引用问题有疑问的话,请看js基本类型和引用类型的区别)
-
所以我们也就发现了这种方式存在的问题,所以我们引入了原型(prototype)的概念
-
原型的概念:
- 重写对象的方法,让相同方法在内存中存在一份(去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份)
-
原型的优先级要低于普通方法。为了便于记忆,我们可以采用类比的方法
- 原型可以看成css中的class,而普通方法可以看成css中的style
-
接下来我们通过原型改写工厂方式
-
原则:
- 相同的属性和方法可以加在原型上
- 混合的编程模式
-
-
总结面向对象的写法
-
构造函数加属性,原型加方法