什么是对象?
比如电视机就是一个对象,很具体的一个实例。
什么是面向对象(OOP)?(是一种思想)
我要看电视,我可以不清楚电视机的内部原理,但我会用电视机表面的功能按键,声音,频道等,并不会影响我使用这个电视对象。
OOP有哪些特点?
抽象:抓住关键需要的点(比如员工工资发放系统,只需要知道名字,工号就可以,不需要身高,体重之类的属性)
封装:电视机就像个黑盒子,内部的原理电路板什么都不用管,只要会用表面的功能就好啦!比如JQ,会用就行,里面的原理可暂时不管。
继承: 父亲有一些功能,儿子继承了这些功能。儿子还可以根据自己的需要有些新的功能和特征。目的是为了最大目的的重用代码。
多重继承: 简单的说,就是一个儿子多个爹。比如盒子:能装东西,汽车:能跑。合起来遗传给后代,就是货车。
函数: 在对象里面就叫做方法,一个东西。函数跟对象绑在一起的话,就叫做方法了。
变量: 在对象里面就叫做属性,一个东西。 变量跟对象绑在一起的时候就叫做变量了。比如变量是女朋友,结婚后就叫做老婆了。同一个东西,只不过从属于我了,是我的女人,就变成了老婆。
this: 当前的这个方法属于谁的,this就指谁。见下面代码。
var arr = [1,2,3];
arr.a = 12;
arr.show = function(){ //这个function属于arr的,所以this指的是arr。
alert(this.a); //弹出12
}
Object对象和其他对象比如Date,Array,RegExp的区别: Date之类的对象,自己都有很多属性和方法,如果平时要实现面向对象,写一些属性和方法的时候,可能会跟原有的对象Date里面的方法属性冲突。Object不同,它几乎没有自己的对象和方法,像白纸,所以创建一个对象的时候,就new Object()
构造函数: 其实是普通的函数,只是它的功能是用来构造对象的函数
function fn(a,b){
//构建对象的代码块
}
工厂方式:这个函数的工作流程有点像工厂加工产品,所以叫工厂模式。如下
function fn(a,b){
//创建原料
var obj = new Object();
//加工产品
obj.name = name;
obj.yongchu = function(){
alert("obj的用途是XXX")
}
//产品出厂
return obj;
}
var obj = fn("one","eat") //没有new关键字
var obj2 = fn("two","eat")
alert(obj.yongchu == obj2.yongchu) //false功能一样却不相等,同样功能占用了更多的内存,浪费。
工厂方式缺点:
1.没有new。 2.不同对象具有相同方法时,方法却不相等,这就占用了内存
类和对象:
类就像是模具,按照这个模具生产出来的可以实实在在用的东西就是对象(实例)。举例如下;
比如:有个零件的模具,模具本身不能用到实际需要的地方,而通过模具生产出来的零件则实实在在的可以用到实际需要的地方去,可以组装零件啊之类。
原型prototype
原型prototype类似于CSS中的class,给原型prototype设置属性和方法了,则所有调用这个对象原型的元素都有这个属性和方法。
给对象加属性和方法,则类似于CSS中的行间样式加属性和方法。
流行的面向对象编写方式
构造函数里面写对象的属性。
原型里面写对象的方法。
如代码
function CreatePerson(name,qq){ //构造函数里面写属性,类名CreatePerson首字母大写
this.name = name;
this.qq = qq;
}
createPerson.prototype.showName = function(){ //原型里面写方法
alert("我的名字" + this.name);
}
createPerson.prototype.showQQ = function(){
alert("我的QQ" + this.qq);
}
var obj = new createPerson("mike","123456");
obj.showName();
obj.showQQ();