原型
我们创建的每个函数都有一个 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
图中蓝色的这条线组成的链状结构就是原型链
网友评论