1、面向对象编程(OOP)的特点:
抽象:抓住核心问题
封装:只能通过对象来访问方法
继承:从已有的对象下继承出新的对象
多态:多对象的不同形态
一、创建对象的几种方式
javascript 创建对象简单的来说,无非就是使用内置对象或各种自定义对象,当然还可以使用JSON,但写法有很多,也能混合使用。
1、工厂方式创建对象:面向对象中的封装函数(内置对象)
functioncreatePerson(name){
//1、原料
var obj=new Object();
//2、加工
obj.name=name;
obj.showName=function(){
alert(this.name);
}
//3、出场、
return obj;
}
var p1=createPerson('小米');
p1.showName()
与系统对象的区别:
var arr=new Array();//生成一个系统数组对象
1、系统对象是直接用 new 在外面生成,而工厂定义的是在函数内部生成
2、工厂定义的函数名称第一个是小写开头,而系统定义的是大写开头
工厂模式的优缺点:虽然解决了创建相似对象的问题,但是却没有解决对象识别问题(即怎样知道一个对象的类型)。
2、构造函数创建对象
当new去调用一个函数,这个时候函数中的this就是创建出来的对象,而且函数的返回值就是this(隐式返回)
new后面的函数叫做构造函数
<1>有参数的构造函数
function CreatePerson(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
}var p1=newCreatePerson('小米');
<2>无参数的构造函数
function CreatePerson(){}
var p1=new CreatePerson();
p1.name="小米";
p1.showName=function(){
alert(p1.name);
}
p1.showName();
构造函数模式的优缺点:
1、优点:创建自定义函数意味着将来可以将它的实例标识为一种特定的类型,这是构造函数 胜过工厂模式的地方
2、缺点:每个方法都要在每个实例上重新创建一遍
3、对象字面量方式创建对象
person={
name:"小米",
age:23
};
4、用原型方式
1、原型对象:只要创建了一个新函数,就会为该函数创建一个prototype属性,这个属性指向 函数的原型对象。在默认情况下,所有的原型对象都会自动获得一个constructor(构造函 数)属性,这个属性是一个指向prototype属性所在函数的指针
2、可以通过isPrototypeOf()方法来确定对象之间是否存在这种关系
function Person(){}
Person.prototype.name="小米";
Person.prototype.showName=function(){
alert(this.name);
}
var p1=newPerson();
p1.showName();
原型模式的优缺点:
1、优点:可以让所有的对象实例共享它所包含的属性和方法
2、缺点:原型中是所有属性都是共享的,但是实例一般都是要有自己的单独属性的。所以一 般很少单独使用原型模式。
5.混合模型
构造函数模式定义实例属性,而原型模式用于定义方法和共享的属性
function CreatePerson(name){
this.name=name;
}
Create.prototype.showName=function(){
alert(this.name);
}
var p1=new CreatePerson('小米');
p1.showName();
var p2=new CreatePerson('小米');
p2.showName();
alert(p1.showName==p2.showName);
//true;原因:都是在原型下面,在内存中只存在一份,地址相同
总结:
function 构造函数(){
this.属性;
}
构造函数.原型.方法=function(){};
var 对象1=new 构造函数();
对象1.方法();