#javascript #javascript-import
#javascript #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’ в другой файл?
Комментарии:
1.
import 'whatever';
это способ импортировать модуль только для побочных эффектов.2. Я пытаюсь разделить функцию round(), чтобы я мог легко ссылаться на нее и использовать ее в других файлах без необходимости добавлять ее в начало каждого файла. Вы хотите сказать, что мой метод импорта запрещает это? Я делаю это неправильно?
3. Импорт этого файла в любом месте страницы изменяет глобальный номер.prototype . Он будет работать во всех ваших файлах, выполненных после этого. При этом это ужасная идея и никогда не изменяйте прототипы, которые вы не создавали .
4. Обратите внимание, что этот
round
метод на самом деле сломан и не работает для очень маленьких или очень больших чисел. Не используйте его.5. Приятно знать, что он прерывается и возвращает ‘NaN’. Спасибо @Bergi
Ответ №1:
Не уверен, почему someNum.round() выдает ошибку, даже если раунд уже определен в прототипе Number в импортированном файле. (Число.prototype.round в someLib.js )
Теперь, поскольку вы вернули round, который нигде не определен в someLib.js На самом деле вы можете передать ссылку на Number.prototype.round, как показано ниже.
export default { round: Number.prototype.round, foo }
Затем либо вы используете его непосредственно как
SomeLib.round.call(someNum, 2)
Или вы можете установить прототип Number в этом файле.
Хотя не уверен, почему уже определенный прототип номера не работал.
Комментарии:
1. Определение экспорта, как вы делали выше, позволяет someNum.round(2) работать. Спасибо.