手写系列
手写一些基础方法
宋哈哈
2018. 7 本科毕业,从此步入前端。。。。。。。。。
展开
-
手写一个instanceof
1.可以判断是不是某个类型的实例2.不能校验原始数据类型3.原理就是找实例的__proto__ 是不是等于构造函数的prototype__proto__一直找 直到找到null为止/** * * @param {实例} vm * @param {构造函数} VM * @returns */function instanceOf(vm, VM) { VM = VM.prototype; vm = vm.__proto__; while (true) { .原创 2022-05-05 22:41:03 · 253 阅读 · 0 评论 -
手写一个bind
bind的特点:1.bind可以修改this指向,并且可以绑定参数2.被bind之后的函数并不会执行,而是返回一个绑定后的函数,这个函数需要被调用才会执行3.如果被bind之后返回的函数被new了 那么函数中的this就是new出来的实例4.new出来的结果,可以找到原有类的原型Function.prototype.bind = function (context) { let _this = this; let bindArgs = Array.prototype.sli.原创 2022-04-26 23:55:39 · 130 阅读 · 0 评论 -
手写一个new关键字
new的特点1.new 一个构造函数,会自动reutrn一个实例化对象2.new完的实例化对象____proto___指向构造函数的prototype3.new构造函数传参自动赋值给当前实例化对象// 把new关键字 改成一个函数 这样调用 mockNew(Animal, '高级动物')function mockNew() { let Constructor = [].shift.call(arguments); // 拿到传入的第一个参数(构造函数) let obj =.原创 2022-04-24 23:53:24 · 277 阅读 · 0 评论 -
手写call和apply的原理
call的特点1.可以改变当前函数的this指向2.可以让函数执行Function.prototype.call = function (context) { // call是可以这样用的fn.call.call.call 如果调用的时候没传上下文,则context是window context = context ? Object(context) : window; context.fn = this; // 给context添加一个属性,待会儿要让它执行 // c.原创 2022-04-24 22:49:26 · 154 阅读 · 0 评论 -
手写es6的模板字符串实现原理
es6模板字符串实现原理原创 2021-05-07 14:59:39 · 1400 阅读 · 1 评论 -
手写reduce函数
reduce的用法及实现原理原创 2022-03-05 15:02:59 · 225 阅读 · 0 评论 -
手写一个深拷贝函数
Object.assign和展开运算符都是浅拷贝 如何实现一个深拷贝function deepClone(obj) { if (obj == null) return obj; // 如果是null 或者undefined 直接返回 // 正则表达式或者日期对象 直接返回 if (obj instanceof Date) return new Date(obj); if (obj instanceof RegExp) return new RegExp(obj); // 不..原创 2022-03-05 11:22:13 · 990 阅读 · 0 评论