标题
在最近的原型和原型链的学习中,感觉压力有点大,学习难度也比较大,但又很基础很重要,我们在学习中得要下很大的功夫才行。
无论什么时候,只要创建了一个新的函数,就会根据一组特定的规则为这个函数创建一个prototype的属性,prototype这个属性指向函数的原型对象,然后所有的的原型对象都会有一个constructor的属性,这个属性包含着一个指向prototype属性所在函数的指针。
原型链的基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法,然后层层递进就构成了实例与原型的链条,这就是原型链的基本概念。
原型它本身也是个对象,因此原型对象它也有原型,有对象就会有__proto__,然后由多级父元素逐级继承形成的链式结构。
原型链保存着所有对象的成员的方法和属性。作用链保存着所有的变量。
原型链的作用是用来控制对象访问成员的使用顺序,优先使用自己的,如果自己没有,才会沿着原型链向父级查找;作用于的作用是控制变量的使用顺序,优先使用活动对象中的局部变量,如果局部中没有的话就去沿用作用域链向父级作用域查找。
原型链的最顶端是:Object.prototype;作用域链的中点是window。所有不需要“对象.”访问的变量都保存在作用域链中。所有需要用“对象”访问的变量都保存在原型链中。
验证原型对象,如果一个对象的原型对象是Array.prototype的话,那么用bject.getPrototypeOf(obj) == Array.prototype来获得指定obj的原型对象;cosole.log(Object.getPrototypeOf(obj1) == Array.prototype,Object.getPrototypeOf(obj2) == Array.prototype).
构造函数就是只要可以new的类型就都是构造函数,var arr = new Array()每个内置对象的构造函数都对应一个内置的原型对象。