手写bind
手写bind 原理 bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN ) 由此我们可以首先得出 bind 函数的两个特点: 1. 返回一个函数 2. 可以传...
1223 字
|
6 分钟
手写instanceof
手写instanceof instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 原理 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。 就是找对象原型链上是否...
272 字
|
1 分钟
手写call, apply
手写call,apply 这应该是面试最傻逼的题目了, 这类 native code ,用js怎么能实现的完美呢??? 首先先理解一下call, apply具体做了些啥事情 原理 1. 调用形式 首先调用call或者apply的都是函数 js function Person(addr...
1123 字
|
6 分钟
手写new
手写new操作符 要手写new的操作实现 必须先了解new的过程发生了什么 1. 创建一个新得对象(obj) 2. 将新对象的__proto__指向构造函数的prototype 3. 将构造函数的this执行这个新对象(obj) 4. 执行构造函数中的代码(为这个新对象添加属性和方法); ...
985 字
|
5 分钟
构造函数的返回值
构造函数的返回值 在使用new 操作符去执行构造函数的时候,构造函数的返回值会决定了最终构建出来的实例是长什么样子的 例如以下例子 js function Person(){ this.name = 'weng'; } const per1 = new Person(); consol...
343 字
|
2 分钟
继承之寄生式组合继承
寄生式组合继承 在组合式继承的那篇文章说过,组合式继承,会将父类的构造函数调用两次。 本质上,子类原型最终式要包含超类的所有实例属性,子类的构造函数只要在执行适合重写原型就行了 再看看组合式继承的例子 js function SuperType(name){ this.name = ...
447 字
|
2 分钟
继承之寄生式继承
寄生式继承 寄生式继承背后的思路类似于寄生 构造函数和工厂模式 思路如下: 1. 创建一个实现继承的函数,这里只要是能返回对象的函数就行,例如 原型式继承的object函数(Object.create()) 2. 然后以某种方式增强对象,返回对象 例子: js function creat...
174 字
|
1 分钟
继承之原型式继承
原型式继承 这是一种不涉及严格意义上构造函数的继承方式 这个思路就是,不需要自定义一个类型,就可以通过原型实现对象之间的信息共享 就仍然是为了实现对象之间的信息共享 目标函数如下 js function object(o){ function F(){} F.prototy...
433 字
|
2 分钟