一.概念
面向对象不是一种语法,是一种编程的思想
二.创建对象
1.直接创建(字面量的方式)
var obj={}
2.构造函数方式创建
var obj=new Object();
3.工厂函数创建对象
function Person(name,age,sex){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.sex=sex;
return obj;
}
优点:可以同时创建多个对象
缺点:创建出来的没有具体类型,都是object类型的
4.自定义构造函数
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
缺点:创建每个实例都要去创建相同的方法,浪费内存。
5.原型模式
function Object(){
//给需要操作的元素添加属性(作为对象的属性进行添加;再添加属性时,先找自己有没有,有就可以直接使用,没有就去原型对象上找。//
}
Object.prototype.init=function(){
//给需要操作的元素添加方法
}
Object.prototype.qiehuan(函数名)=function(){
//需要实现的效果
}
new Object().init()
特点:原型模式不仅可以防止命名冲突,还可以实现所有实例共用prototype的内容,当函数以构造函数形式调用,所创建的对象会有一个隐含属性proto指向该构造函数的原型对象。
实例对象·原型对象与构造函数的关系如下图:
1566482344447.png
原型链(一条向上的链式结构)
1566485254743.png
对象查找的规则:
先是在自己本身找,有就可以直接使用,没有就顺着原型链往上找,找到了就可以使用,找不到继续往上找,如果找到了null还没有,结果就返回undefined。