Function.prototype.bind 实现原理 Function.prototype.bind 方法说明 作用同call和apply一样,在指定对象上执行指定方法,不同点在于: 1、bind返回的是一个可执行函数 2、通过bind实现偏函数 源码关键点在于 1、闭包:缓存bind方法的参数(上下文对象和参数列表) 2、返回可执行函数 3、可执行函数的内部通过apply方法实现对象和方法的绑定 4、偏函数的关键在于闭包(缓存bind方法的参...
Function.prototype.apply 实现原理 Function.prototype.apply 方法说明 apply方法的作用和call方法一样,不同之处在于提供参数的方式,apply使用参数数组,而call使用一组参数列表 源码关键点在于 同Function.prototype.call方法的实现一致,还是要在传递进来的上下文对象中构建一个需要执行的方法 源码 Function.prototype.myApply = functio...
Function.prototype.call 实现原理 Function.prototype.call 方法说明 call() 允许为不同的对象分配和调用属于一个对象的函数/方法。 call() 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法) 源码的关键点在于 在传递进来的上下文对象中构造一个需要执行的方法,比如: ctx = { fn...
instanceof 实现原理 instanceof 方法说明 判断指定构造函数的原型对象是否出现在指定对象的原型链上 示例 function Test (name) { this.name = name this.log = function () { console.log(this.name) } } const t = new Test() // 判断对象t是否是另一个对象(Test)的实例 /...
new 运算符实现原理 new 运算符 方法说明 new运算符会创建一个用户自定义对象类型(就是自定义函数、或者说构造函数)的实例或具有构造函数的内置对象(比如:Number、String等原生对象)的实例,具体的过程如下: 创建一个空对象,{} 将第一步的空对象链接到另一个对象(new操作符后面跟着的构造函数的原型对象) 将第一步创建的对象作为构造函数的this上下文 返回对象实例,如果构造函数有返回对象,则对象实...
Object.create 实现原理 Object.create 方法说明 Object.create()方法创建一个新的对象,并以方法的第一个参数作为新对象的__proto__属性的值(以第一个参数作为新对象的构造函数的原型对象) Object.create()方法还有第二个可选参数,是一个对象,对象的每个属性都会作为新对象的自身属性,对象的属性值以descriptor(Object.getOwnPropertyDescript...
Object.assign 实现原理 Object.assign 方法说明 Object.assign()用于将对象自身所有的可枚举属性从一个或者多个源对象上复制到目标对象 源码的关键点在于 该方法的原理比较简单,实现的关键点在于理解 ”方法说明“ 中的内容,对照下面的源码内容和注释,即可理解和实现 源码 Object.myAssign = function (target, ...src) { for (let i = ...
Function.prototype.call / apply / bind Function.prototype.call 方法说明 call() 允许为不同的对象分配和调用属于一个对象的函数/方法。 call() 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法) 源码的关键点在于 在传递进来的上下文对象中构造一个需要执行的方法,比如: ctx = { fn...
JavaScript 运行机制 1. 单线程的JavaScript JavaScript是单线程的语言这,由它的用途决定的,作为浏览器的脚本语言,主要负责和用户交互,操作DOM。 假如JavaScript是多线程的,有两个线程同时操作一个DOM节点,一个负责删除DOM节点,一个在DOM节点上添加内容,浏览器该以哪个线程为标准呢? 所以,JavaScript的用途决定它只能是单线程的,过去是,将来也不会变。 HTML...
javascript继承 原型链继承 优点 简单,易于实现 缺点 无法实现多继承 子类实例无法为父类构造函数传递自己特有的属性值,因为父类构造函数只在为子类构造函数的原型对象赋值时调用了一次,所以每个实例都共享同一样的父类属性值 代码 // 父类构造函数 function Parent (name, age) { this.name = name this.age = age ...
柯里化、偏函数、反柯里化 柯里化 描述 柯里化算是特殊的偏函数,把一个多参数函数转换成多个单参数函数,也就是说把一个具有n个参数的函数转换成n个一元函数 示例 // 正常写法 function add (a, b) { return a + b } const resAdd = add(2, 3) console.log(resAdd) // 5 // 柯里化 function currieAdd...
javascript的浅拷贝和深拷贝 什么是浅拷贝和深拷贝 拷贝:指拷贝源对象到目标对象,又分为浅拷贝和深拷贝两种 浅拷贝:如拷贝的对象有属性值是非基础类型(即对象),则浅拷贝拷贝的是对象的引用,而非对象本身,拷贝完成以后更改目标对象,源对象也会被更改 深拷贝:深拷贝完美解决了浅拷贝存在的问题,目标对象是一个全新的对象,更改目标对象不会影响到源对象 浅拷贝 Object.assign() // 对象的属性值都是基础类型 c...
javascript节流、防抖 为什么需要节流、防抖 当某个事件频繁触发时,事件处理函数会频繁执行,如果处理函数有一些费时、耗性能的操作,就会导致页面出现卡顿甚至浏览器崩溃,这时就需要节流和防抖 什么是节流、防抖 节流 当事件频发触发时,事件处理程序每隔一段时间执行一次 防抖 如果某个频繁触发的事件在规定的时间内没有再次触发,则执行事件处理程序,如果在这段时间内事件再次触发了,则重新计时 什么时候需要节流、防...
javascript原型链 一张图看懂JS原型链 属性 prototype:获取函数的原型对象,函数特有的属性 _proto_:获取对象的构造函数的原型对象,所有的JS对象都有该属性 constructor:获取对象的构造函数,所有的JS对象都有该属性 说明 javascript一切皆对象,比如"JS原型链“图中列出的函数、原型对象、对象实例 示例 // 示例代码,下面的例子会用到 function Foo () ...