是否有理由直接从原型而不是通过继承引用方法?这些似乎是事实上的标准:
var argsArr = Array.prototype.slice.call(arguments);
和
var isArr = Object.prototype.toString.call(object) === '[object Array]';
文字对我来说似乎更好?它更短,更难以阅读。
var argsArr = [].slice.call(arguments);
和
var isArr = {}.toString.call(object) === '[object Array]';
如果性能提升,则必须可以忽略不计,并且功能很容易缓存。也许创建一个新对象的开销微乎其微,但这又可以忽略不计?
答案 0 :(得分:1)
当然,你的方式会很好地运作。它确实会不必要地创建和丢弃对象,但正如你所说,这样做的开销将是非常微不足道的。 FWIW,可读性是主观的(我发现使用原型的版本更容易阅读。)
我认为这主要是为了避免不必要的创造,不必要的记忆流失。发动机过去比现在慢得多。
参与过早的微优化模式......
对于slice
用例的Looks like,使用文字的Chrome浏览器在我的机器上慢了大约4%,在Firefox上它的价格下降了9%,在IE10上没有任何差别。很可能无论你在做什么之后都会淹没这种效果。当然,记忆流失的影响难以衡量。
如果你这么做很多,我会绕过整个问题并拥有一个Utils
对象(或将这些对象添加到Array
):
var Utils = (function() {
var arraySlice = Array.prototype.slice; // Or [].slice
var objToString = Object.prototype.toString; // Or {}.toString
function cloneArray(a) {
return arraySlice.call(a);
}
function isArray(a) {
return objToString.call(a) === '[object Array]';
}
return {
cloneArray: cloneArray,
isArray: isArray
};
})();