2016-05-12

文章

Flexbox and Truncated Text

解决缩放时文字溢出的问题

5 种方法教你重置 Mac 用户登录密码

从柏拉图看 VR 的前世今生,为什么 VR 是中世纪的望远镜

聚沙

开放-封闭原则(OCP,Open - Closed Priciple)

OCP的核心如下:

Open for extension, Closed for modification

翻译过来是:对扩展开放,对修改封闭

需求总是变化的,面对变化,一个优秀的程序(类,组件)应该是通过扩展来适应新的变化,而不是通过修改

另一方面,也就是说,当一个程序(类,组件)写好之后,就不应该再修改它的代码

http://imweb.io/topic/5616652d5d6f37745e8f496f

游离的 DOM

游离的 dom 元素是不能用使用那些 api 的

实现一个 Deferred 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
let events = require('events');
let util = require('util');

let MyPromise = function() {
};
util.inherits(MyPromise, events.EventEmitter);

MyPromise.prototype.then = function(resolve, reject, progress){
  if (typeof resolve === 'function') {
    this.once('success', resolve);
  }
  if (typeof reject === 'function') {
    this.once('error', reject);
  }
  if (typeof progress === 'function') {
    this.on('progress', progress);
  }
  return this;
};


var Deferred = function() {
  this.state = 'pending';
  this.promise = new MyPromise();
};

Deferred.prototype.resolve = function(obj) {
  this.state = 'fulfilled';
  this.promise.emit('success', obj);
};
Deferred.prototype.reject = function(err) {
  this.state = 'failed';
  this.promise.emit('error', err);
};
Deferred.prototype.progress = function(data) {
  this.promise.emit('progress', data);
};

代码执行效率

https://jsperf.com/

类数组

定义:具有length属性

转化成数组,很简单:

1
2
3
4
5
6
7
Array.prototype.slice.call(arrayLike, 0);

// 更简洁的写法
[].slice.call(arrayLike, 0);

// ES6 的写法
Array.from(arrayLike);

类数组对象

1
2
3
4
5
6
7
let arrayLike = {
  length: 2,
  0: 'anything is okay',
  1: true
};

[].slice.call(arrayLike, 0); // ["anything is okay", true]

当然,length 也不一定是 2,数组的 length 是可变的,你可以随意扩充,也可以用它来截断

1
2
3
4
let a = [4, 3, 6, 8, 2, 5, 9];

a.length = 4; // [4, 3, 6, 8]
a.length = 12; // [4, 3, 6, 8, undefined × 8]

类数组函数

函数也有length属性,其值等于函数要接收的参数。

MORE

Comments