You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 支持传参// 支持柯里化// 支持new运算符调用,只是被绑定的this被忽略,// 且返回的实例还是会继承构造函数的构造器属性与原型属性,并且能正常接收参数Function.prototype.mybind=function(ctx){if(typeofthis!=='function'){thrownewError("Function.prototype.bind - what is trying to be bound is not callable");}constself=this;constargsArr=Array.from(arguments);constargs=argsArr.slice(1,argsArr.length);constfbound=function(){constargus=Array.from(arguments);// 如果new运算符创建实例,则this指向构造函数的prototype,否则指向ctx。returnself.apply(thisinstanceoffbound ? this : ctx,args.concat(argus));}fbound.prototype=Object.create(this.prototype);returnfbound;}
4.new
/** * 模拟实现 new 操作符 * @param {Function} ctor [构造函数] * @return {Object|Function|Regex|Date|Error} [返回结果] */functionnewOperator(ctor){if(typeofctor!=='function'){throw'newOperator function the first param must be a function';}newOperator.target=ctor;varnewObj=Object.create(ctor.prototype);varargsArr=Array.from(arguments);varctorReturnResult=ctor.apply(newObj,argsArr.slice(1));varisObject=typeofctorReturnResult==='object'&&ctorReturnResult!==null;varisFunction=typeofctorReturnResult==='function';if(isObject||isFunction){returnctorReturnResult;}returnnewObj;
1.继承
JavaScript深入之从原型到原型链
JavaScript常用八种继承方案
组合寄生继承实现:
2.原型链
JavaScript深入之从原型到原型链
继承与原型链
每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
3.call,apply,bind
JavaScript深入之call和apply的模拟实现
JavaScript深入之bind的模拟实现
call实现:
apply实现:
bind实现:
4.new
5.防抖和节流
JavaScript专题之跟着 underscore 学节流
7分钟理解JS的节流、防抖及使用场景
节流:
防抖:
6.event loop
6.1浏览器中
6.2node中
7.map/weakMap
8.变量提升
变量提升
在JavaScript代码运行之前其实是有一个编译阶段的。编译之后才是从上到下,一行一行解释执行。变量提升就发生在编译阶段,它把变量和函数的声明提升至作用域的顶端。(编译阶段的工作之一就是将变量与其作用域进行关联)。
变量提升需要注意两点:
1.提升的部分只是变量声明,赋值语句和可执行的代码逻辑还保持在原地不动
2.提升只是将变量声明提升到变量所在的变量范围的顶端,并不是提升到全局范围
The text was updated successfully, but these errors were encountered: