Ответ 1
Конечно. Функции - это объекты:
var foo = function() {};
Function.prototype.bar = function() {
alert("bar");
};
foo.bar();
Будет предупреждать "бар"
Есть ли способ добавить метод ко всем функциям javascript без использования библиотеки прототипов?
что-то вроде:
Function.prototype.methodName = function(){
return dowhateverto(this)
};
Это то, что я пробовал до сих пор, но он не работал. Возможно, это плохая идея, и если бы вы могли бы рассказать мне, почему?
если я могу добавить его к набору функций, я выбираю
что-то вроде:
MyFunctions.prototype.methodName = function(){
return dowhateverto(this)
};
где MyFunctions - это массив имен функций
Благодарю вас
Конечно. Функции - это объекты:
var foo = function() {};
Function.prototype.bar = function() {
alert("bar");
};
foo.bar();
Будет предупреждать "бар"
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
Изменение встроенных объектов JS может дать вам некоторые сюрпризы.
Если вы добавляете внешние библиотеки или меняете версию одного из них, вы никогда не будете уверены, что они не будут перезаписывать расширение.
Попробуйте использовать Object.prototype:
Object.prototype.methodName = function(){
return dowhateverto(this)
};
Но также прислушайтесь к предупреждению о том, что расширение собственных объектов не всегда является хорошей идеей.
Функция .prototype не может быть надежно обработана в Javascript; это не реальный объект, потому что конструктор Function() должен возвращать функцию, а не объект. Но вы не можете относиться к нему как к нормальной функции. Его поведение при попытке доступа к его свойствам может быть undefined и варьироваться между браузерами. См. Также этот вопрос.