是否可以向 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/