自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Function.prototype.bind 实现原理

Function.prototype.bind方法说明作用同call和apply一样,在指定对象上执行指定方法,不同点在于:1、bind返回的是一个可执行函数2、通过bind实现偏函数源码关键点在于1、闭包:缓存bind方法的参数(上下文对象和参数列表)2、返回可执行函数3、可执行函数的内部通过apply方法实现对象和方法的绑定4、偏函数的关键在于闭包(缓存bind方法的参...

2020-03-26 11:47:46 333

原创 Function.prototype.apply 实现原理

Function.prototype.apply方法说明apply方法的作用和call方法一样,不同之处在于提供参数的方式,apply使用参数数组,而call使用一组参数列表源码关键点在于同Function.prototype.call方法的实现一致,还是要在传递进来的上下文对象中构建一个需要执行的方法源码Function.prototype.myApply = functio...

2020-03-26 11:46:49 328

原创 Function.prototype.call 实现原理

Function.prototype.call方法说明call() 允许为不同的对象分配和调用属于一个对象的函数/方法。call() 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)源码的关键点在于在传递进来的上下文对象中构造一个需要执行的方法,比如:ctx = { fn...

2020-03-26 11:45:54 461

原创 instanceof 实现原理

instanceof方法说明判断指定构造函数的原型对象是否出现在指定对象的原型链上示例function Test (name) { this.name = name this.log = function () { console.log(this.name) }}const t = new Test()// 判断对象t是否是另一个对象(Test)的实例/...

2020-03-26 11:41:55 515

原创 new 运算符实现原理

new 运算符方法说明new运算符会创建一个用户自定义对象类型(就是自定义函数、或者说构造函数)的实例或具有构造函数的内置对象(比如:Number、String等原生对象)的实例,具体的过程如下:创建一个空对象,{}将第一步的空对象链接到另一个对象(new操作符后面跟着的构造函数的原型对象)将第一步创建的对象作为构造函数的this上下文返回对象实例,如果构造函数有返回对象,则对象实...

2020-03-26 11:40:58 400

原创 Object.create 实现原理

Object.create方法说明Object.create()方法创建一个新的对象,并以方法的第一个参数作为新对象的__proto__属性的值(以第一个参数作为新对象的构造函数的原型对象)Object.create()方法还有第二个可选参数,是一个对象,对象的每个属性都会作为新对象的自身属性,对象的属性值以descriptor(Object.getOwnPropertyDescript...

2020-03-26 11:39:42 2514

原创 Object.assign 实现原理

Object.assign方法说明Object.assign()用于将对象自身所有的可枚举属性从一个或者多个源对象上复制到目标对象源码的关键点在于该方法的原理比较简单,实现的关键点在于理解 ”方法说明“ 中的内容,对照下面的源码内容和注释,即可理解和实现源码Object.myAssign = function (target, ...src) { for (let i = ...

2020-03-26 11:38:46 899

原创 Function.prototype.call / apply / bind

Function.prototype.call方法说明call() 允许为不同的对象分配和调用属于一个对象的函数/方法。call() 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)源码的关键点在于在传递进来的上下文对象中构造一个需要执行的方法,比如:ctx = { fn...

2020-03-26 11:34:08 223

原创 JavaScript 运行机制

1. 单线程的JavaScriptJavaScript是单线程的语言这,由它的用途决定的,作为浏览器的脚本语言,主要负责和用户交互,操作DOM。假如JavaScript是多线程的,有两个线程同时操作一个DOM节点,一个负责删除DOM节点,一个在DOM节点上添加内容,浏览器该以哪个线程为标准呢?所以,JavaScript的用途决定它只能是单线程的,过去是,将来也不会变。HTML...

2020-03-23 12:28:03 127

原创 javascript继承

原型链继承优点简单,易于实现缺点无法实现多继承子类实例无法为父类构造函数传递自己特有的属性值,因为父类构造函数只在为子类构造函数的原型对象赋值时调用了一次,所以每个实例都共享同一样的父类属性值代码// 父类构造函数function Parent (name, age) { this.name = name this.age = age ...

2020-02-11 11:06:08 133

原创 柯里化、偏函数、反柯里化

柯里化描述柯里化算是特殊的偏函数,把一个多参数函数转换成多个单参数函数,也就是说把一个具有n个参数的函数转换成n个一元函数示例// 正常写法function add (a, b) { return a + b}const resAdd = add(2, 3)console.log(resAdd) // 5// 柯里化function currieAdd...

2020-01-31 11:58:49 196

原创 javascript的浅拷贝和深拷贝

什么是浅拷贝和深拷贝拷贝:指拷贝源对象到目标对象,又分为浅拷贝和深拷贝两种浅拷贝:如拷贝的对象有属性值是非基础类型(即对象),则浅拷贝拷贝的是对象的引用,而非对象本身,拷贝完成以后更改目标对象,源对象也会被更改深拷贝:深拷贝完美解决了浅拷贝存在的问题,目标对象是一个全新的对象,更改目标对象不会影响到源对象浅拷贝Object.assign()// 对象的属性值都是基础类型c...

2020-01-29 12:54:07 250

原创 javascript节流、防抖

为什么需要节流、防抖当某个事件频繁触发时,事件处理函数会频繁执行,如果处理函数有一些费时、耗性能的操作,就会导致页面出现卡顿甚至浏览器崩溃,这时就需要节流和防抖什么是节流、防抖节流当事件频发触发时,事件处理程序每隔一段时间执行一次防抖如果某个频繁触发的事件在规定的时间内没有再次触发,则执行事件处理程序,如果在这段时间内事件再次触发了,则重新计时什么时候需要节流、防...

2020-01-28 09:52:51 375

原创 javascript原型链

一张图看懂JS原型链属性prototype:获取函数的原型对象,函数特有的属性_proto_:获取对象的构造函数的原型对象,所有的JS对象都有该属性constructor:获取对象的构造函数,所有的JS对象都有该属性说明javascript一切皆对象,比如"JS原型链“图中列出的函数、原型对象、对象实例示例// 示例代码,下面的例子会用到function Foo () ...

2020-01-26 22:51:37 241

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除