Skip to content

Latest commit

 

History

History
98 lines (68 loc) · 2.24 KB

File metadata and controls

98 lines (68 loc) · 2.24 KB

Function每一个函数/类都是Function的实例

所以所有函数/类的实例的__proto__一定指向Function.prototype

Object每一个对象都是Object的实例

所以所有对象的实例的__proto__一定指向Function.prototype

比如,Array、Number、String等内置类

Function.prototype的一些属性和方法:

callapplybind

toString

Function的一些属性和方法:

prototype__proto__

Array.prototype的一些属性和方法:

pushpopforEachmapsort

Array的一些属性和方法:

lengthfromisArray

prototype__proto__

Object.prototype的一些属性和方法:

hasOwnPropertyisPrototypeOftoStringvalueOf

Object的一些属性和方法:

assigncreatedefinePropertyentriesfreezekeys

prototype__proto__

__proto__的指向

let arr = [10, 20, 30]
let Func = function () { }
let f = new Func()
let obj = {}

arr__proto__指向Array.prototype

Array.prototype__proto__指向Object.prototype


f__proto__指向Func.prototype

Func.prototype__proto__指向Object.prototype

Func__proto__指向Function.prototype

Function.prototype__proto__指向Object.prototype

这里的Function.prototype是一个匿名空函数,但是它的相关操作和其他类型的prototype对象没有任何区别,并且它的的__proto__也指向Object.prototype


obj__proto__指向Object.prototype

Object.prototype__proto__指向null



Array__proto__指向Function.prototype

Object__proto__指向Function.prototype

Function__proto__指向Function.prototype

console.log(Func instanceof Func, false);
console.log(Function instanceof Function, true);
console.log(Function.__proto__ === Function.prototype, true);

所以

Object作为一个类,也是一个函数,所以他是Function的一个实例

Function作为一个类,也是一个对象,所以他也是Object的一个实例