面向对象
面向对象:
概念
面向对象是一种编程的思维方式。其实就是封装思想。我们可以把一切都看做对象。把相同行为的对象归纳为类,通过类的封装隐藏内部细节,通过继承实现类的特化,通过多态实现基于对象类型的动态分派,所以说面向对象的三大特性是封装、继承、多态。
对象的构成:属性和方法。
属性即变量,用于存储数据
方法即函数,用于完成某种功能。
对象的分类:全局对象、内置对象、自定义对象
全局对象:golbal对象 window即全局对象。
函数: alert() setInterval() parseInt() isNaN()
内置对象: 1、Array 数组对象
2、String 字符串对象
3、Date 日期对象
4、RegExp 正则表达式
5、Math 数学对象
自定义对象:1、创建对象
(1) 通过object方式来创建
显示创建 var 对象名=new object();
隐式创建 对象名={}
添加属性和方法
对象名.属性名=属性值;
对象名.方法名=函数;
缺点: 只能创建单体对象
(2)工厂模式
(3)构造函数模式
都是先定义一个函数传递你所需要的属性,在函数内部写方法,最终在外面传递实参 ,他俩的不同就是工厂模式在函数内部现实的创建一个对像,最后return,但他没有解决对象识别的问题。构造函数和普通函数的不同就是调用方式不同,任何函数通过NEW操作符来调用都可以成为构造函数。构造函数就是直接将属性和方法付给this对象。虽然它解决了对象识别问题但他增加了代码,占用内存。
(4)原型模式
(5)组合使用构造函数和原型模式
自定义对象中最常用的就是组合构造函数和原型模式。他在构造函数中定义实例属性,在原型中定义方法和共享属性。这样会使每个实例都有自己的一份属性副本同时又共享方法的使用,最大限度的节省了内存。
prototype(原型):每个函数都有一个prototype属性,这个属性指向该函数的原型对象,可以让让所有实例共享属性和方法。
原则:以构造函数方式创建对象的属性,以原型模式创建对象共享方法。
原型链:
apply()或call()调用函数 语法:函数名call更改函数的this对象
作用域链
作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域
全局作用域==>函数1作用域==>函数2作用域
作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。
原型链
原型链其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法
原型链是针对构造函数的,比如我先创建了一个函数,然后通过一个变量new了这个函数,那么这个被new出来的函数就会继承创建出来的那个函数的属性,然后如果我访问new出来的这个函数的某个属性,但是我并没有在这个new出来的函数中定义这个变量,那么它就会往上(向创建出它的函数中)查找,这个查找的过程就叫做原型链。
Object ==> 构造函数1 ==> 构造函数2
就和css中的继承一样,如果自身没有定义就会继承父元素的样式。