Javascript добавить метод прототипа ко всем функциям?

Есть ли способ добавить метод ко всем функциям javascript без использования библиотеки прототипов?

что-то вроде:

Function.prototype.methodName = function(){ 


  return dowhateverto(this) 

 };

Это то, что я пробовал до сих пор, но он не работал. Возможно, это плохая идея, и если бы вы могли бы рассказать мне, почему?

если я могу добавить его к набору функций, я выбираю

что-то вроде:

MyFunctions.prototype.methodName = function(){ 


  return dowhateverto(this) 

 };

где MyFunctions - это массив имен функций

Благодарю вас

Ответы

Ответ 1

Конечно. Функции - это объекты:

var foo = function() {};

Function.prototype.bar = function() {
  alert("bar");
};

foo.bar();

Будет предупреждать "бар"

Ответ 2

function one(){
    alert(1);
}
function two(){
    alert(2);
}

var myFunctionNames = ["one", "two"];

for(var i=0; i<myFunctionNames.length; i++) {
    // reference the window object, 
    // since the functions 'one' and 'two are in global scope
    Function.prototype[myFunctionNames[i]] = window[myFunctionNames[i]];
}


function foo(){}

foo.two(); // will alert 2

Ответ 3

Изменение встроенных объектов JS может дать вам некоторые сюрпризы.
Если вы добавляете внешние библиотеки или меняете версию одного из них, вы никогда не будете уверены, что они не будут перезаписывать расширение.

Ответ 4

Попробуйте использовать Object.prototype:

Object.prototype.methodName = function(){ 

  return dowhateverto(this) 
};

Но также прислушайтесь к предупреждению о том, что расширение собственных объектов не всегда является хорошей идеей.

Функция .prototype не может быть надежно обработана в Javascript; это не реальный объект, потому что конструктор Function() должен возвращать функцию, а не объект. Но вы не можете относиться к нему как к нормальной функции. Его поведение при попытке доступа к его свойствам может быть undefined и варьироваться между браузерами. См. Также этот вопрос.