javascript - 是否有将 'intentionally generic' String 或 Array JavaScript 方法传输到其他对象的首选方法?

标签 javascript string abstraction uppercase native-code

在调试过程中,我遇到了一种情况,在这种情况下,最好泛化 toUpperCase 方法。以下是我想出的几种方法:

//Local
foo = [];
foo.toUpperCase = String(foo).toUpperCase;
foo.push("a");
foo.toUpperCase();

//Global
foo = [];
window.toUpperCase = function (obj) {return String(obj).toUpperCase();}
foo.push("a");
toUpperCase(foo);

//Prototype
foo = [];
Array.prototype.toUpperCase = String.prototype.toUpperCase;
foo.push("a");
foo.toUpperCase();

//Constructor Prototype
foo = [];
Array.prototype.constructor = String.prototype.toUpperCase;
foo.push("a");
foo.constructor();

//toString override
var foo = [];
foo.push("a");
var bar = String(foo);
foo.toString = function() { return bar.toUpperCase(); }
foo.toString();

大多数字符串和数组方法在 spec 中都有此免责声明:

Therefore, it can be transferred to other kinds of objects for use as a method.

是否有实现此类抽象的常规方法?

最佳答案

如果您需要 toUpperCase 函数来仅处理数组,那么您可以像这样扩展 Array 类:

Array.prototype.toUpperCase = function () {
    return String(this).toUpperCase();
};

之后你可以写:

var foo = [];
foo.push('a');
foo.toUpperCase();

关于javascript - 是否有将 'intentionally generic' String 或 Array JavaScript 方法传输到其他对象的首选方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17094710/

相关文章:

javascript - 如何修改所有选定 id 的子 li 和 div 的元素?

javascript - 如何在 Android(Java/Kotlin) App 中调用 Javascript 函数?

android - 字符串不能转换为整数

java - 在 Java 中,对于字符串 x,s.length() 的运行时成本是多少?是 O(1) 还是 O(n)?

javascript - *.d.ts 文件从哪里来?

javascript - 如何在 React 组件渲染之前更新 Baobab 叶子数据?

c# - 循环地将字符串分割成锯齿状数组

oop - 理解 OOP 中的抽象

design-patterns - 包含其他类集合的类的设计(操作方法)

Grails 域类 id 继承