Codelet Keep code simple stupid

JavaScript原型

不同于一般的OOP语言,JavaScript中对象的创建可以不借助‘类’的概念,而是通过‘原型’机制实现OOP的。 首先,我们先看看OOP的几大特性: 封装 继承 多态 抽象 在Java中,一个典型的对象创建过程如下: class Test { private String name; private int age; public Test(String name, int age) { this.name = name; this.age = age; } public void print() {} } // ......

JavaScript构造函数检查

在JavaScript之中,构造函数和普通函数并没有本质区别,因此对构造函数的检查只能在函数调用时进行, 即相当于判断函数是否是以new的方式调用的。 总结一下大致有下面几种方式: instanceof function Base () { if (!(this instanceof Base)) { throw new TypeError("Cannot call a class as a function"); } } 这种做法是最常见的,一般情况下足够了,不足是不能检测出Base.call(instance)这样的调用 new.target...

Chrome DevTools Bug

今天发现了Chrome DevTools的一个bug,这个bug会导致DevTools卡死,造成Sources标签无法响应, 这样一来就无法继续调试了,本来想重装浏览器的,好在最后解决了,现在就来记录一下。 复现: 要复现bug首先要有一行比较长的JS代码,比如一些用webpack打包后再经过uglify的代码文件,F12打开 调试工具,在Sources标签下找到文件打开,然后随便找一行打上断点,刷新,如果执行到断点处调试工具 卡死了,那么问题就复现了。 原因: 因为Chrome在某个版本之后开始支持行内断点了,因此当一行代码被打上断点时,DevTools会分析整行代 码,如果代码长...

Leetcode Template

Generate a leetcode post from template. Data { "name": "Problem", "time": "%t" } Result {{ fullname }}.md --- layout: post title: {{ name }} date: {{ time }} tags: - algorithm - OJ - leetcode --- Question -------- Solution -------- ```cpp ```

JavaScript位移操作

JavaScript语言中并没有真正的整数类型,number类型是浮点数,因此按位操作会首先将浮点数下取整, 转化为32位整数,运算完成后再转化为浮点数 JavaScript中一共有7种位操作符 按位与 - & 按位或 - | 按位异或 - ^ 按位取反 - ~ 左移 - << 有符号右移 - >> 无符号右移 - >>> 其中的按位右移有两种,分为有符号和无符号,这两者有什么区别呢? 先看正数 7 >> 1 // 3 7 >>> 1 // 3 结果是相等的,每右...