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

标签 javascript prototype

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

相关文章:

javascript - 如何使用 jquery 限制 div 中的单词。我想在一个 div 中只显示 3 个词并隐藏其他词

Javascript多图像颜色变化

javascript - 如何在 NodeJs 中使用 .pfx 证书和密码验证 Bearer token ?

jquery - this.toPlatedString 不是函数原型(prototype)

C语言原型(prototype)创建

javascript - 将值从嵌套的 React 组件子级传递到表单 onSubmit 句柄函数

javascript - 输入后,在 db 中搜索字符串

javascript - 在嵌套类对象上定义属性

javascript - 在 jquery 上下文中调用 this.function

javascript - 如何使用 Prototype JS 在前一个函数完成后执行一个函数