在调试过程中,我遇到了一种情况,在这种情况下,最好泛化 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/