Javascript 向 String 实例添加方法

标签 javascript

是否可以向 String 实例添加方法,例如

x = "123"
x.method = function() { console.log("test") }

x.method()

最佳答案

是的,你可以做到。不过,您必须首先获取字符串基元并将其设为字符串实例:

x = new String("123");
x.method = function() { console.log("test") };

x.method();

JavaScript 既有字符串原语,也有字符串实例。在您的原始代码中,当您编写时:

x.method = ...;

...从变量 x 中检索字符串基元并将其提升为字符串实例,您将方法添加到该实例中,但由于字符串 instance 从未存储回 x 变量,当您尝试调用它时该方法不存在。 (是的,这违反直觉。)

通过在上面使用new String(...),我实际上得到了字符串实例并将其存储在x中。然后,由于它是一个合适的对象,我可以向它添加属性。

您还可以向 String.prototype 添加方法,如下所示:

String.prototype.capitalize = function() {
    return this.substring(0, 1).toUpperCase() + this.substring(1);
};

console.log("testing".capitalize()); // "Testing"

有些人认为这是不好的做法。其他人说这正是我们拥有原型(prototype)继承的原因,因此我们可以使用原型(prototype)来增强事物。虽然我从未见过人们增强 String.prototype 时出现任何问题,但当人们增强 Array.prototype 时,我似乎有问题(因为人们坚持关于 misuing for-in ) 和 Object.prototype

关于Javascript 向 String 实例添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712105/

相关文章:

javascript - Internet Explorer 禁用/启用按钮。按钮保持禁用状态,直到用户将鼠标移到窗口上

javascript - 在相同的 $ajax 请求中将变量和数组从 JQuery 发布到 PHP

javascript - 根据 JSON 更改图像的 src 属性

javascript - setTimeout 在 for 循环内的 promise

javascript - 将 knockoutjs 与 KoGrid 一起使用不能在 Chrome 或 FF 中工作,但可以在 IE8 中工作

javascript - 来自url的 Angular ,编码和解码对象

javascript - 浅比较如何在 react 中工作

javascript - react 表 - 不刷新内容

javascript - 具有不同颜色选项的浮线菜单/导航

javascript - 如何将日期范围选择器(AngularJS 自定义指令)链接到 AngularUI-Select2 行为?