Heim  >  Artikel  >  Web-Frontend  >  Die Beziehung zwischen dem JavaScript-Aufrufmodus und dieser Schlüsselwortbindung

Die Beziehung zwischen dem JavaScript-Aufrufmodus und dieser Schlüsselwortbindung

不言
不言Original
2018-04-21 16:09:251403Durchsuche

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

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 Aufrufebene


apply(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!"


Im Gegensatz dazu trennt die Bindefunktion das Binden an die Funktion und den Aufruf der Funktion. Damit die Funktion in einem bestimmten Kontext aufgerufen werden kann, gilt insbesondere die Implementierung von event bind


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]... 
};
Verwandte Empfehlungen:


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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn