原型及原型链
1. 显示原型,隐式原型,原型链,原型链的用处
原型链是用来找属性的,作用域链是用来找变量的,比如下面的这句话,
执行上下文,执行上下文栈
1. 变量提升,以及函数提升
作用域以及作用域链
1. 作用域链可以用来查找变量,以及
2. 全局作用域,局部作用域,全局变量,局部变量
3. 作用域和执行上下文的关系
局部变量被自动释放和函数对象成为垃圾对象的关系,函数对象的变量一定是局部变量吗?(不一定)
对象创造的模式
1. 利用Object构造函数创建
2. Object字面量创建
3. 工厂模式(利用函数来解决2方式中的代码重复的问题,然后返回一个对象)
4. 构造函数模式创建(有方法的重复,这会导致每个实例对象被创建时,对应的方法,就需要一定的堆空间,造成内存的浪费)
5. 构造函数加原型链(这里的原型链是指,往第4种情况中的类函数对象的原型中添加方法,这样就能解决第4种情况的缺点)
6. 利用原型链的继承的方法,来使得两个函数对象的实例可以关联起来,确切的说,使得子类型函数对象的实例可以去调用父类型函数对象的原型对象中的方法:这个要点在于,使得子类型函数对象的原型对象指向父类型函数对象的实例对象,“例子如下”
先给出未处理之前的父类型和子类型的函数对象
现在做出改变,原理是,子类型函数对象的实例对象的隐式原型指向子类型对象的显示原型对象,然后,由于函数对象的显示原型对象默认为Object函数对象的实例对象,现在采取的做法就是,不要浏览器给我默认了,我来修改,修改的结果如下所示:
这里要特别注意的是,这句话实际上由“往子类型函数对象的原型中添加方法”变成了往父类型的函数对象的实例对象中添加了方法
值得注意的是,上面的第6种方案的中的子类型函数对象的显示原型对象的constructor属性,由原来本来指向的是子类型函数对象的,变成了指向父类型函数对象,这个很恐怖,为了解决这个问题,可以这样处理
原型链继承
上面的第六种方式就使用了原型链的继承的知识,第六种方法主要是,解决不了不同类的实例的特性的继承
借用构造函数继承(假继承)
组合继承:原型链继承(真继承)+借用构造函数继承(假继承)