重命名内置的javascript函数

时间:2019-02-26 09:19:13

标签: javascript

可以重命名内置的JavaScript函数吗?

我正在尝试将“反向”功能重命名为另一个名称, 但仍然具有相同的功能

5 个答案:

答案 0 :(得分:4)

您可以通过在函数原型中创建别名来更改名称

Array.prototype.newreversename = Array.prototype.reverse;
var arr=["abc","sssd"];
console.log(arr.newreversename())

您还可以为新功能创建包装器功能

Array.prototype.newreversefunction = function() {
  return this.reverse();
};
var arr=["a","c"];
console.log(arr.newreversefunction())

答案 1 :(得分:3)

可以,但是不能

这称为猴子修补。 Javascript具有足够的灵活性,可以更改诸如此类的基本内容,但是如果您以此方式修改语言的正常部分,则会破坏其他代码并使其他人无法阅读自己的代码。

也就是说,即使在这样的原型中,您也可以分配和清除内容

Array.prototype.rev = Array.prototype.reverse
> function reverse() { [native code] }
Array.prototype.reverse = null
> null
[1,2,3,4,5].rev()
> [5, 4, 3, 2, 1]
[1,2,3,4,5].reverse()
> "[1,2,3,4,5].reverse is not a function"

答案 2 :(得分:1)

可以,但是我强烈建议您不要这样做。

正确的方法是从原型(Object.getOwnPropertyDescriptor)获取方法的属性描述符,然后使用该属性定义新的属性(Object.defineProperty),然后使用{{ 3}}摆脱上一个:

Object.defineProperty(
  Array.prototype,
  "thingy",
  Object.getOwnPropertyDescriptor(Array.prototype, "reverse")
);
delete Array.prototype.reverse;
console.log([1,2,3].thingy());  // [3, 2, 1]
console.log([1,2,3].reverse()); // Error

答案 3 :(得分:0)

您可以这样做:

Array.prototype.myReverse = Array.prototype.reverse;
delete Array.prototype.reverse;

但是您应该避免这种情况,因为许多库都依赖于反向函数。相反,如果要使用其他名称调用它,只需执行第一行:

Array.prototype.myReverse = Array.prototype.reverse;

答案 4 :(得分:-1)

您可以通过创建别名来更改名称

Array.prototype.slicing = Array.prototype.slice;
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slicing(2))