导入JavaScript原型扩展

问题描述

我(在此站点上)发现了一个很酷的小原型扩展函数,用于清理数字,现在想在一个库中使用它,然后可以根据需要导入该库。我看到了如何导入已定义的函数,而不是原型扩展。

文件:SomeLib.js

"use strict";
Number.prototype.round = function(places) {
    return +(Math.round(this + "e+" + places)  + "e-" + places);
}
function foo() {
    console.log("doing SomeLib.foo()");
}
export default { round,foo }

文件:SomeImporter.js

"use strict";
import somelib from "./SomeLib.js"; 
somelib.foo();   // outputs 'doing SomeLib.foo()'
var someNum = 1.2345;
console.log(someNum.round(2)); // outputs 'Uncaught ReferenceError: round is not defined'

如何在另一个文件中导入'Number.prototype.round'函数

解决方法

不确定即使导入的文件中Number的原型中已经定义了该回合,为什么someNum.round()也会引发错误。 (someLib.js中的Number.prototype.round)

现在,由于您返回的回合在someLib.js中的任何地方都未定义 您实际上可以按如下方式传递Number.prototype.round的引用。

export default { round: Number.prototype.round,foo }

然后直接将其用作

SomeLib.round.call(someNum,2)

或者您可以在此文件中设置Number的原型。

尽管不确定,为什么已经定义的Number原型不起作用。