Это тривиально, чтобы добавить прототипы всех Function
с:Локальная сфера Прототип функции переопределения
Function.prototype.foo = function() { return 'bar'; };
(new Function).foo(); // 'bar'
Однако, это также плохая практика, чтобы назначить вещи прототип глобального объекта, в связи с кросс-модуля проблем объекта Reliance , что частично приводит к кончине предыдущих версий prototype.js.
Предположим, я хочу, чтобы все мои функции имели способ foo
. Я хотел бы сделать что-то похожее на это:
(function() {
var Fn = Function;
Fn.prototype.foo = function() { return 'bar'; };
(new Fn).foo(); // 'bar'
}());
(new Function).foo() // also 'bar'. this is bad!
К сожалению, это влияет на прототип Function
«s, а также, потому что функция была областью действия путем ссылки.
Обычный подход «Копировать значение» для передачи примитивных значений в IIFE также потерпел бы неудачу, потому что сам Function
является объектом.
(function (Fn) {
Fn.prototype.foo = function() { return 'bar'; };
(new Fn).foo(); // 'bar'
}(Function));
Function.foo // function() { return 'bar'; }
Учитывая эти примеры, это правда, что невозможно расширить выбраны прототипы функций, не затрагивая все другие функции, находящиеся за пределами сферы?
, связанные http://stackoverflow.com/questions/7988566/javascript-class-inherit-from-function-class –
@ArtyomNeustroev «Ваш [ * sic *] пытается наследовать от функции. Это - правая боль. " Ну ... это позор. – Brian