如何在Javascript中扩展内置对象,例如Math?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Javascript中扩展内置对象,例如Math?相关的知识,希望对你有一定的参考价值。

正在学习Call,Apply,Bind trio。

然后尝试了这个:

Math.__proto__.sum = function(arg1){var res=0; for(i in arg1) res+=arg1[i]; return res; };
Math.sum([1,2,3])
//Output: "6function (arg1){var res=0; for(i in arg1) res+=arg1[i]; return res; }"

为什么此输出包含与和输出相关的函数定义?

我们如何使用这样的实用方法在项目中扩展像Math这样的内置对象并将其全部使用?

谢谢 :)

答案

这是一个典型的例子,说明为什么你不捣乱__proto__(除非你完全知道你在做什么)。将函数附加到Object.prototype作为可枚举属性会导致它在for...in循环中迭代,因为Array扩展了Object。这会导致函数连接到您的总和并强制转换为字符串。

如果你想为Math添加功能,为了大多数目的,你可以直接分配给Math

Math.sum = function() {...}
另一答案

javascript允许您修改本机对象:

Math.sayHello = function(friend) {
  alert('Hello there ' + friend);
}

Math.sayHello('buddy');
另一答案

最好以与Math相同的方式实现Math.max的方法,该方法接受参数并返回折叠结果。

Math.add = (...args) => args.reduce((a, b) => a + b, 0);

console.log(Math.add(1, 2, 3));
console.log(Math.add(...[7, 8, 9]));

以上是关于如何在Javascript中扩展内置对象,例如Math?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript_02--------学习笔记

在 javascript 中扩展 Array 对象的方法

JavaScript对象

javascript 对象的扩展性

如何从 VSCode 中的“保存格式”中排除文件扩展名和语言?

Javascript中数组方法以及数组方法的扩展--基础篇