gpt4 book ai didi

javascript - 直接访问原型(prototype)的值,即 Object.prototype.toString.call()

转载 作者:行者123 更新时间:2023-11-30 05:44:28 25 4
gpt4 key购买 nike

是否有理由直接从原型(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com