Javascript 原型总结
prototype
prototype 是一个显式声明的原型属性,只有函数拥有,除了通过 bind
创建的函数。默认它只有一个属性 constructor 指向构造函数,即:
const fun = function() {}
fun.prototype.constructor === fun // true
__proto__
每个对象都有一个 __proto__
属性,指向它构造函数的原型,即:
function Fun() {}
const fun = new Fun();
fun.__proto__ === Fun.prototype;
函数对象?
函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象,例如:
- Function
- Object
- Array
- String
- Number
- RegExp
- Date
这些内置对象的构造器是由 JavaScript 本身所定义的,通过 [native code]
来初始化返回的对象,而不是由用户来指定对象的构造方式。
Array.__proto__
// f() { [native code] }
Object.__proto__
// f() { [native code] }
Function.__proto__
// f() { [native code] }
Function 和 Object
函数对象都是 Function 自身的实例
Function.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
同时 Function 也继承自 Object
Function.__proto__.__proto__ === Object.prototype
Array instanceof Object // true
原型链的终点是 null
Object.prototype.__proto__ === null
关于原型链的一切看这张图就好了