继承机制(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)会在事件队列首(未证实...)。
网友评论