放低过去

文章 评论 浏览 27

放低过去 2022-05-04 13:57:39

先理清楚 new 关键字调用函数都的具体过程,那么写出来就很清楚了

  1. 首先创建一个空的对象,空对象的__proto__属性指向构造函数的原型对象
  2. 把上面创建的空对象赋值构造函数内部的this,用构造函数内部的方法修改空对象
  3. 如果构造函数返回一个非基本类型的值,则返回这个值,否则上面创建的对象
function _new(fn, ...arg) {
    var obj = Object.create(fn.prototype);
    const result = fn.apply(obj, ...arg);
    return Object.prototype.toString.call(result) == '[object Object]' ? result : obj;
}

const result = fn.apply(obj, ...arg);的apply应该改为call吧,或者把...去掉

第 14 题:情人节福利题,如何实现一个 new

放低过去 2022-05-04 13:55:01

两个循环的次数的是一样的,但是 j 与 k 的初始化次数是不一样的

  • 第一个循环的 j 的初始化次数是 100 次,k 的初始化次数是 10w 次
  • 第二个循环的 j 的初始化次数是 1w 次, k 的初始化次数是 1000w 次

所以相同循环次数,外层越大,越影响性能

应该不是吧, let是每次循环都会声明一个新的 i 、j 、 K ,所以

1.   i : 100       j:  100*1000       k : 100 * 1000 * 10000
2.   i: 10000    j:10000 * 1000   k: 10000 * 1000 *100

每一次for循环只会初始化一次而已。后面的循环是不会初始化。

第 120 题:为什么 for 循环嵌套顺序会影响性能?

放低过去 2022-05-04 13:54:53
1. 使用最新版的webpack,官方会优化模块的解析速度

2.缩小loader的查询范围,例如:rules中loader添加:`include: path.resolve(__dirname, 'src')` 

3. 用DllPlugin插件单独编译一些不经常改变的代码,比如node_modules的第三方库

4.删除不需要的一些代码,利用SplitChunksPlugin 进行分块

5.cache-loader来进行缓存持久化

6.不同的devtool配置也会影响性能,最好配置为‘eval’,或者‘cheap-module-eval-source-map’

详情可以参考webpack官方文档

第 122 题:webpack 打包 vue 速度太慢怎么办?

放低过去 2022-05-04 13:50:29
var arr1 = [1, 2, [3, 4]];
arr1.flat(Infinity)

JavaScript 专题之数组扁平化

放低过去 2022-05-04 13:44:21

webpack 和 vue都不用

第 122 题:webpack 打包 vue 速度太慢怎么办?

放低过去 2022-05-04 11:12:51

我们会发现,相比寄生组合式继承,ES6 的 class 多了一个 Object.setPrototypeOf(Child, Parent) 的步骤。

好奇 es6 多了这一个步骤的原因,继承静态属性和方法吗?

除此之外也可以通过构造方法(类)来判断两个“类”是否是继承关系吧,比如:

Child instanceof Parent // true

ES6 系列之 Babel 是如何编译 Class 的(下)

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文