面向对象就是把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。
面向过程就是自顶向下顺序执行,逐步求精,其程序结构是按功能划分为若干个基本模块,这些某块形成一个树状结构;各模块之间的联系尽可能简单,在功能上相对独立;每一个模块内部均由顺序、选择和循环三种基本结构组成,其模块化实现的具体方法是使用子程序。程序流程在写程序时就已决定。
构造函数与工厂函数的差异
1.工厂函数需要创建对象,以及必须有返回值
2.工厂函数针对的都是object的对象模型,而构造函数可以匹配自定义的对象模型
3.构造函数的弊端:如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx在局部获取不到,就会去全局中获取
4.构造函数可以重写,可以在全局中添加新属性和方法person.prototype={},但工厂函数只能在局部添加
原型
每个函数都有一个属性叫做prototype,prototype是一个对象模型,默认的只有一个叫做constructor的属性,只想这个函数本身;每一个实例对象都有一个proto指针,指向构造函数的prototype原型
原型对象的作用*
定义所有对象实例所共享的属性和方法
继承
特点:子类能够继承父类的所有属性和方法
1.原型链继承
访问顺序:当访问一个对象的属性和方法时,如果当前对象拥有,那么直接调用,否则向他的父级找,如果父级有,那么直接调用,否则继续向上找,直到找到object基类位置,入股最终没找到返回undefined
确定原型与实例的关系
instanceOf:判断一个实例对象是否是某个构造函数的实例
isPrototype():只要原型链中出现过的原型,都可以说是原型链所派生的实例的原型。
2.构造函数继承
call()和apply()
二者用途相同:用来调用函数,传入函数的参数用来改变函数中的this的指向
区别:第二个参数不同,apply第二个参数是数组
3.组合式继承
使用原型链实现原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样既通过在原型上定义方法实现了函数调用,有保证每个实例都有他自己的属性