18 Stimmen

javascript hinzufügen Prototyp-Methode für alle Funktionen?

Gibt es eine Möglichkeit, eine Methode zu allen Javascript-Funktionen hinzuzufügen, ohne die Prototyp-Bibliothek zu verwenden?

etwas in der Art von :

Function.prototype.methodName = function(){ 

  return dowhateverto(this) 

 };

das ist, was ich bisher versucht habe, aber es hat nicht funktioniert. Vielleicht ist es eine schlechte Idee, auch wenn so könnten Sie mir bitte sagen, warum?

Wenn ja, kann ich sie zu einer Reihe von Funktionen hinzufügen, die ich ausgewählt habe

etwas wie:

MyFunctions.prototype.methodName = function(){ 

  return dowhateverto(this) 

 };

wobei MyFunctions ein Array von Funktionsnamen ist

Dankeschön

32voto

troelskn Punkte 110542

Sicher. Funktionen sind Objekte:

var foo = function() {};

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

foo.bar();

Will Alarm "bar"

3voto

thomasrutter Punkte 109036

Versuchen Sie stattdessen Object.prototype:

Object.prototype.methodName = function(){ 

  return dowhateverto(this) 
};

Beachten Sie aber auch die Warnung, dass die Erweiterung nativer Objekte nicht immer eine gute Idee ist.

Function.prototype kann nicht wirklich zuverlässig in Javascript manipuliert werden; es ist kein echtes Objekt, da der Function()-Konstruktor eine Funktion und kein Objekt zurückgeben muss. Aber man kann sie auch nicht wie eine normale Funktion behandeln. Sein Verhalten, wenn Sie versuchen, auf seine "Eigenschaften" zuzugreifen, kann undefiniert sein und von Browser zu Browser variieren. Siehe auch diese Frage .

1voto

Luca Matteis Punkte 28819
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

0voto

Mic Punkte 24128

Das Ändern von eingebauten JS-Objekten kann zu einigen Überraschungen führen.
Wenn Sie externe Bibliotheken hinzufügen oder die Version einer dieser Bibliotheken ändern, können Sie nie sicher sein, dass sie Ihre Erweiterung nicht überschreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X