经常读某一些前端框架的源码时,看到一些公共的基础处理方案,遂简单思考了下。因为很多时候,细节很重要!
var slice = [].slice,
splice = [].splice,
push = [].push,
toString = Object.prototype.toString;
上面的代码为什么这么写咧?
- [].slice 其实就是 Array.prototype.slice 的简写;
-
方便之后进行 array.call(slice, index) 或 nodeList.call(slice, index);
test.call(slice, index), 这里的test不一定是数组, 可能是其他的类型(类数组),比如下面的例子
, 不防打开 console试试.var test = document.getElementsByTagName('div'); [].slice.call(test, test.length -1 ); // [ <div> ... </div> ] test instanceof Array; // false test instanceof HTMLCollection; // true
- Object.prototype.toString 不能写成 {}.toString, 后者会报语法错, 因为 {} 是语句块,倒是可以写成
({}).toString
.
其他: 汤姆大叔博客(强大的原型和原型链)也写错过喔 {}.hasOwnProperty.call(foo, 'bar');
应该是 ({}).hasOwnProperty.call(foo, 'bar');
, 仔细看!