首页 > 解决方案 > 使用 Symbol.for 改变原生原型

问题描述

所以,我在考虑这个问题,为了可读性和便利性,你在原生原型中添加了一些东西(比如,做 String.prototype.func = ...),从而留有机会在未来得到一个灾难性的错误。不过,我想出了一个想法,您如何才能解决这个问题。使用 ES6 符号,您可以将任何方法、getter 等添加到原生原型中,并 100% 保证它们永远不会被覆盖。我的实施看起来像这样:

const sym = {
   last: Symbol('last') 
};

Object.defineProperty(Array.prototype, sym.last, {
    get: function() {
        return this[this.lenght - 1]
    }
});

// usage
[1, 2, 3][sym.last] 
// 3. Less readable than [1, 2, 3].last,
// but better, than making an independent function

我的问题是:这种方法可能存在哪些陷阱?例如,如果我想以这种方式实现整个库,它会不会显着影响我的脚本的性能?

标签: javascript

解决方案


推荐阅读