重命名javascript中的内置原型方法
Rename builtin prototype method in javascript
今天有人问了我一个很意外的问题。我知道string.repeat(number)
在javascript中重复字符串到上述数字。例子。
"Father".repeat(3)
应该打印
FatherFatherFather
我被要求做同样的事情,但不是使用.repeat
,我应该使用我的新方法,如strRepeater
,以这样的方式。
"Father".strRepeater(3)
应该等于
"Father".repeat(3);
请问我该怎么做?
有三个选项:
-
为原型创建别名:
String.prototype.strRepeater = String.prototype.repeat;
-
为原型创建包装器:
String.prototype.strRepeater = function() { return this.repeat.apply(this, arguments); };
-
创建自己的方法:
String.prototype.strRepeater = function(times) { var res = ""; for (var i = 0; i < times; i++) { res += this; } return res; };
虽然添加到原型中的其他答案是完全正确的,但它们也是一个坏习惯。
如果在原型中添加任何东西,你应该使用Object.defineProperty()
,这样它就不会作为方法的成员出现(即,for...in
循环将显示成员,但不正确添加时)。
虽然这不是String原型的要求,但养成坏习惯并想知道为什么事情不能正常工作总是一个坏主意…
所以添加方法的安全方法是:Object.defineProperty(String.prototype, "strRepeater", {
value: function(number) {
return this.repeat(number)
}
};
或者更安全:
if (!String.prototype["strRepeater"]) {
Object.defineProperty(String.prototype, "strRepeater", {
value: function(number) {
return this.repeat(number)
}
};
}
从技术上讲,这将它设置为默认的enumerator: false
, configurable: false
和writeable: false
-这意味着"不,你不能列出我,删除我,或更改我"。
试试这个:
String.prototype.strRepeater = function(number) {
return this.repeat(number)
};
console.log("Father".strRepeater(3));
解释:
-
String.prototype.strRepeater
添加你的函数到String对象 -
this.repeat(number)
将使用this
中的当前字符串调用repeat内置函数,参数为number -
return
返回.repeat()
在strRepeater()
之外的结果
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 如何从构造函数中调用js原型方法
- Javascript不调用原型方法
- 有没有任何情况下,一个方法不应该是原型方法
- 调用影子原型方法的更简单/更好的方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 构造 JavaScript Array 原型方法
- 在Javascript中扩展继承的原型方法
- 如何在另一个原型中创建可调用的原型方法
- 覆盖原型方法
- 实现原型方法
- 从原型方法更改实例属性
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 避免在外部称为原型方法中丢失对象实例
- 原型方法不是一个函数,为什么
- 是否可以从 javascript 中的原型方法访问私有类属性
- 找不到 Javascript 原型方法覆盖
- 调用本机原型方法时扩展或继承对象原型