原型
我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象就是原型对象
-
所有的对象,都有一个proto属性
-
所有的函数,都有一个prototype属性(函数也是对象)
-
所有的对象(数组、对象、函数)的proto指向它的构造函数的prototype属性值
-
obj.proto === Object.prototype (obj 是通过 Object new出来的)
原型链
一个对象不断的在自己的属性proto.proto.proto ... 中去查找某一个属性的过程
(proto.proto.proto ... 就叫做原型链)
// 构造函数
function F(name) {
this.name = name
}
// 创建示例
var f = new F('hello world')
f.toString();
-
f 去本身的属性里面查找 toString(),没有找到
-
f 去属性proto中查找toString(),没有找到 (f.proto === F.prototype)
3.去 F.prototype 的属性proto中查找 (f.proto.proto === F.prototype.proto === Object.proto) 找到了
下图表示原型到原型链之间的关系
如果一直往上找都没有找到,返回undefined ,最上层是Object.prototype.proto === null
构造函数和实例原型之间的关系
__proto__ 属性会指向该对象的原型
每个原型都有一个 constructor 属性指向关联的构造函数
原型对象就是通过 Object 构造函数生成的
Object.prototype.__proto__ 的值为 null 没有原型
图中蓝色的这条线组成的链状结构就是原型链










网友评论