是否有理由直接从原型(prototype)而不是通过继承来引用方法?这些似乎是事实上的标准:
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]';
如果有性能提升,它一定可以忽略不计并且函数很容易缓存。也许创建新对象的开销很小,但又可以忽略不计?
最佳答案
当然,您的方法会非常有效。它确实会不必要地创建和丢弃对象,但正如您所说,这样做的开销将非常微不足道。 FWIW,可读性是主观的(我发现使用原型(prototype)的版本更容易阅读。)
我认为这主要是为了避免不必要的创建,避免不必要的内存流失。引擎过去比现在慢得多。
参与过早的微优化模式...
Looks like对于 slice
用例,在 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
};
})();
关于javascript - 直接访问原型(prototype)的值,即 Object.prototype.toString.call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761024/