In diesem Artikel werden hauptsächlich relevante Informationen zur Beziehung zwischen dem JavaScript-Aufrufmodus und dieser Schlüsselwortbindung vorgestellt. Freunde, die sie benötigen, können sich auf
Aufrufaufruf
Aufruf beziehen Eine Funktion unterbricht die Ausführung der aktuellen Funktion und übergibt Kontrolle und Parameter an die neue Funktion.
Inkonsistenzen zwischen tatsächlichen und formalen Parametern führen nicht zu Laufzeitfehlern. Mehr werden ignoriert und weniger werden als undefiniert gefüllt.
Jede Methode erhält zwei zusätzliche Parameter: this und arguments. Der Wert davon hängt vom Aufrufmodus ab: Aufrufmodus: Methode, Funktion, Konstruktor und Aufrufmodus anwenden
Dem wird ein Wert zugewiesen und er tritt in dem Moment ein, in dem er aufgerufen wird. Mit der Call-Methode können verschiedene Aufrufmodi implementiert werden
var myObject = { value: 0, increment: function (inc) { this.value += typeof inc === 'number' ? inc : 1; } }; myObject.double = function(){ var helper = function(){ console.log(this);// this point to window } console.log(this);// this point to object myObject helper(); } myObject.double();//myObject Window
1 Das Methodenaufrufmuster Methodenaufrufmuster
Methoden: Funktionen werden als Eigenschaften des Objekts gespeichert. Wenn die Methode aufgerufen wird, wird diese an das Objekt gebunden
Öffentliche Methoden: Methoden, die den Kontext des Objekts erhalten, zu dem sie gehören dadurch
myObject.increment(); document.writeln(myObject.value); //
Grundlegende Implementierung: myObject.increment。call(myObject,0);
2 Die Funktionsaufrufmusterfunktion Aufrufmuster
Wenn die Funktion kein Attribut des Objekts ist, wird sie als Funktion aufgerufen (etwas Unsinn...), diese ist an das globale Objekt (Fenster) gebunden
In ECMAScript5 gibt es einen neuen strikten Modus, um Probleme so früh wie möglich aufzudecken und das Debuggen zu erleichtern. Dies ist undefiniert
var add = function (a,b) { return a + b;}; var sum = add(3,4);// sum的值为7
Die zugrunde liegende Implementierung: add.call(window,3,4)
strict mode:add.call(undefined,3,4)
Der Unterschied zwischen Methodenaufrufmodus und Funktionsaufrufmodus
function hello(thing) { console.log(this + " says hello " + thing); } person = { name: "Brendan Eich" } person.hello = hello; person.hello("world") // [object Object] says hello world 等价于 person。hello。call(person,“world”) hello("world") // "[object DOMWindow]world" 等价于 hello。call(window,“world”)
3 Das Konstruktoraufrufmuster
JavaScript ist eine Sprache, die auf prototypischer Vererbung basiert und eine Reihe von Objektkonstruktionssyntaxen für klassenbasierte Sprachen bereitstellt.
dies verweist auf das Objekt, das von new
var Quo = function (string) { this.status = string; }; Quo.prototype.get_status = function ( ) { return this.status; }; var myQuo = new Quo("this is new quo"); //new容易漏写,有更优替换 myQuo.get_status( );// this is new quo
4 The Apply Invocation Pattern< zurückgegeben wird 🎜>
Apply und Call sind integrierte Parameter von JavaScript. Beide binden dies sofort an die Funktion, und der letztere muss einzeln übergeben werden durch die unterste Aufrufebeneapply(this,arguments[]); call(this,arg1,arg2...); var person = { name: "James Smith", hello: function(thing,thing2) { console.log(this.name + " says hello " + thing + thing2); } } person.hello.call({ name: "Jim Smith" },"world","!"); // output: "Jim Smith says hello world!" var args = ["world","!"]; person.hello.apply({ name: "Jim Smith" },args); // output: "Jim Smith says hello world!"
Function.prototype.bind = function(ctx){ var fn = this; //fn是绑定的function return function(){ fn.apply(ctx, arguments); }; }; bind用于事件中 function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; //this对象指向的是MyObject的实例 MyObject.prototype.onClick = function(e) { var t=this; //do something with [t]... };
Detailliertes Beispiel für JavaScript, das ActiveX aufruft, um eine Oracle-Datenbank zu betreiben
Eine kurze Diskussion über das aufrufende Objekt von JS
Das obige ist der detaillierte Inhalt vonDie Beziehung zwischen dem JavaScript-Aufrufmodus und dieser Schlüsselwortbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!