原生JS总结

继承机制(prototype链)

new Function ---> __proto__ ---> Function.prototype --->
__proto__ ---> Object.prototype ---> __proto__ ---> null
所有实例共享链节点上的方法,链节点通过 __proto__ 来连接。

读写__proto__

Object.getPrototypeOf 和 Object.setPrototypeOf

Object.create 区别 new

Object.create(Function.prototype) 只是简单的 ({}).__proto__=Function.prototype
与new Function 的区别是:new Function 执行构造函数并返回一个正真的Function实例。
:必须通过构造器来获取实例,如,你无法通过设置Array.prototype来获取一个Array实例:

var o={};
o.__proto__=Array.prototype;
Array.isArray(o)//false
Array.isArray(new Array)//true
Object.assign 补充对象属性值 and 复制对象属性配置对象

Object.assign是复制值。如:

var t={a:1},r1={a:2},r2={a:3};
Object.assign(t,r1,r2);
//等于
t.a=r1.a;
t.a=r2.a;

所以,如果a是一个getter/setter,那么它将会触发。
要复制一个属性配置对象就用Object.getOwnPropertyDescriptors 加Object.defineProperties 。

并发模型和事件循环

  • JS是单线程、不阻塞的执行模型,所有异步任务通过注册事件回调来处理。
  • 每个执行上下文(函数,全局)是一个帧,函数的嵌套执行会形成一个执行栈。
  • 当执行栈空就从事件队列取一个事件回调到执行栈继续执行,这叫事件循环。
  • 异步任务完成后会在事件队列添加回调,nextTick(callback)会在事件队列(未证实...)。

闭包

你可能感兴趣的:(原生JS总结)