In meinem speziellen Fall:
callback instanceof Function
または
typeof callback == "function"
Spielt das überhaupt eine Rolle, was ist der Unterschied?
Zusätzliche Ressource:
JavaScript-Garten typeof gegen instanceof
In meinem speziellen Fall:
callback instanceof Function
または
typeof callback == "function"
Spielt das überhaupt eine Rolle, was ist der Unterschied?
Zusätzliche Ressource:
JavaScript-Garten typeof gegen instanceof
Trotz instanceof vielleicht ein bisschen schneller sein als typeof Ich ziehe die zweite vor, weil sie so magisch sein kann:
function Class() {};
Class.prototype = Function;
var funcWannaBe = new Class;
console.log(funcWannaBe instanceof Function); //true
console.log(typeof funcWannaBe === "function"); //false
funcWannaBe(); //Uncaught TypeError: funcWannaBe is not a function
Natürlich ist es wichtig........ !
In unserem Beispiel werden wir die Funktion auf zwei verschiedene Arten deklarieren.
Wir werden beides verwenden function declaration
und _Funktion Konstrukteur_ . Wir werden sehen, wie typeof
et instanceof
in diesen beiden unterschiedlichen Szenarien verhält.
Funktion mit Funktionsdeklaration erstellen:
function MyFunc(){ }
typeof Myfunc == 'function' // true
MyFunc instanceof Function // false
Eine mögliche Erklärung für dieses unterschiedliche Ergebnis ist, dass wir eine Funktionsdeklaration vorgenommen haben, typeof
kann verstehen, dass es sich um eine Funktion handelt, denn typeof
prüft, ob der Ausdruck, auf den typeof angewendet wird, in unserem Fall MyFunc
implementiert _Methode aufrufen_ oder nicht . Wenn sie implementiert Call
Methode ist es eine Funktion, andernfalls nicht, zur Klärung siehe ecmascript-Spezifikation für typeof .
Funktion mit Funktionskonstruktor erstellen:
var MyFunc2 = new Function('a','b','return a+b') // A function constructor is used
typeof MyFunc2 == 'function' // true
MyFunc2 instanceof Function // true
Hier typeof
behauptet, dass MyFunc2
ist eine Funktion, ebenso wie die instanceof
Wir wissen bereits typeof
prüfen, ob MyFunc2
implementiert Call
Methode oder nicht, da MyFunc2
ist eine Funktion und implementiert call
Methode, so wird typeof
weiß, dass es sich um eine Funktion handelt, andererseits haben wir function constructor
zu erstellen MyFunc2
wird sie zu einer Instanz von Function constructor
Deshalb instanceof
beschließt außerdem, dass true
.
Was ist am sichersten zu verwenden?
Wie wir in beiden Fällen sehen können typeof
Operator erfolgreich behaupten kann, dass wir es hier mit einer Funktion zu tun haben, ist es sicherer als instanceof
. instanceof
scheitert im Falle von function declaration
denn function declarations
sind nicht ein Fall von Function constructor
.
Bewährte Verfahren :
Als Gary Rafferty vorgeschlagen hat, sollte man am besten typeof und instanceof zusammen verwenden.
function isFunction(functionItem) {
return typeof(functionItem) == 'function' || functionItem instanceof Function;
}
isFunction(MyFunc) // invoke it by passing our test function as parameter
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.