- 原型链是实现继承的主要方法(
_proto_
的引用链), 即让一个引用类型继承另一个引用类型的属性和方法
- 注意有三个关键词:
-
prototype
构造函数具有 -
constructor
原型对象具有 -
_proto_
实例对象具有
-
每个实例对象Object
都有一个私有属性_proto_
指向它的原型对象prototype
。 该原型对象也有一个自己的原型对象,层层向上直到一个对象的的原型对象为null.
null没有原型,是原型链最后一个环节。
function SuperType(){ this.property=true; } // 构造函数 对象
SuperType.prototype.getSuperValue=function(){return this.property;}
function SubType(){ } //构造函数 对象
SubType.prototype = new SuperType(); //原型 此时的指针是[[prototype]]
var instance = new SubType(); //实例
[[prototype]]默认情况下不可以再被外部访问,但会被for..in等遍历原型链上可以被枚举的属性的时候访问
结论:
- 创建一个函数,这个函数就立即拥有属性
prototype
。 即prototype
属性存在函数中,指向的是原型对象- 函数的
prototype
对象具有属性constructor
, 且指向该函数自身
fun.prototype.constructor === func
结论为 true- 函数实例的
contructor
指向函数本身
var obj = new Fuc(); obj.constructor == Func;
- JavaScript每个对象,都有一个内置的
_proto_
属性
obj instanceof Func
结论为true- JavaScript 对象的内部属性——
_proto
_属性,函数也是对象
原形脸最终指向
- 函数对象的原型链最终指向
Function prototype
对象 - 非函数对象的原型链最终指向
Object prototype
对象 Function prototype
对象的_proto_
属性也指向Object prototype
对象Object prototype
对象的_proto_
属性指向null
创建对象
- new方法构建
- 分配内存作为新创建的对象
- 将新创建的对象的
_proto_
属性指向函数F的原型对象
- 对象字面量
- 分配内存作为新创建的对象
- 将新创建对象的
_proto_
属性指向Object prototype object