详解函数完整的原型链

58 阅读1分钟

函数也是对象

函数是由new Function创建出来的,因此函数也是一个对象, 所有的函数都是new Function的实例

函数的原型链结构

画出下列代码的原型链结构

//var Person = new Function();
function Person(){
  
}

function.jpg

Function.prototype常用成员

  • call:调用函数,重新指向this
  • apply:调用函数,重新指向this
  • bind:重新指向this,返回一个新的函数,不调用。

完整版原型链

绘制完整版原型链的目的是辅助大家理解js中对象的继承关系。

full.png

总结:

  1. 所有函数都是new Function创建出来的,因此所有函数.__proto__都是Function.prototype
  2. 所有对象都是new Object创建出来的,因此所有对象.__proto__都是Object.prototyp

测试1:

Function.prototype === Function.prototype   true
Object.__proto__ === Function.prototype       true
Function.prototype.__proto__ === Object.prototype  true
Object.prototype.__proto__ === Object.prototype    false
Object.__proto__.__proto__ === Object.prototype    true

测试2:

function Person() {}
var p = new Person()

console.log(p.constructor)
console.log(Person.constructor)