new操作符构造对象时,也会同时将构造函数的prototype对象指派给新创建的对象,成为该对象内置的原型对象;内置的原型对象本身也是对象,也有自己关联的原型对象,这样就形成了所谓的原型链。
在JavaScript内部,对象的属性和方法追溯机制是通过所谓的prototype链来实现的
。当用new操作符构造对象时,也会同时将构造函数的prototype对象指派给新创建的对象,成为该对象内置的原型对象。对象内置的原型对象应该是对外不可见的,尽管有些浏览器(如Firefox)可以让我们访问这个内置原型对象,但并不建议这样做。内置的原型对象本身也是对象,也有自己关联的原型对象,这样就形成了所谓的原型链
。
在原型链的最末端,就是Object构造函数prototype属性指向的那一个原型对象
。这个原型对象是所有对象的最老祖先,这个老祖宗实现了诸如toString等所有对象天生就该具有的方法。其他内置构造函数,如Function, Boolean, String, Date和RegExp等的prototype都是从这个老祖宗传承下来的,但他们各自又定义了自身的属性和方法,从而他们的子孙就表现出各自宗族的那些特征。这不就是“继承”吗?是的,这就是“继承”,是JavaScript特有的“原型继承”。