28 Nov 2016
不同于一般的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() {}
}
// ......
24 Nov 2016
在JavaScript之中,构造函数和普通函数并没有本质区别,因此对构造函数的检查只能在函数调用时进行,
即相当于判断函数是否是以new的方式调用的。
总结一下大致有下面几种方式:
instanceof
function Base () {
if (!(this instanceof Base)) {
throw new TypeError("Cannot call a class as a function");
}
}
这种做法是最常见的,一般情况下足够了,不足是不能检测出Base.call(instance)这样的调用
new.target...
06 Nov 2016
今天发现了Chrome DevTools的一个bug,这个bug会导致DevTools卡死,造成Sources标签无法响应,
这样一来就无法继续调试了,本来想重装浏览器的,好在最后解决了,现在就来记录一下。
复现:
要复现bug首先要有一行比较长的JS代码,比如一些用webpack打包后再经过uglify的代码文件,F12打开
调试工具,在Sources标签下找到文件打开,然后随便找一行打上断点,刷新,如果执行到断点处调试工具
卡死了,那么问题就复现了。
原因:
因为Chrome在某个版本之后开始支持行内断点了,因此当一行代码被打上断点时,DevTools会分析整行代
码,如果代码长...
04 Nov 2016
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
```
02 Nov 2016
JavaScript语言中并没有真正的整数类型,number类型是浮点数,因此按位操作会首先将浮点数下取整,
转化为32位整数,运算完成后再转化为浮点数
JavaScript中一共有7种位操作符
按位与 - &
按位或 - |
按位异或 - ^
按位取反 - ~
左移 - <<
有符号右移 - >>
无符号右移 - >>>
其中的按位右移有两种,分为有符号和无符号,这两者有什么区别呢?
先看正数
7 >> 1 // 3
7 >>> 1 // 3
结果是相等的,每右...