Heim  >  Artikel  >  Web-Frontend  >  Daran ist der Aufrufmodus gebunden

Daran ist der Aufrufmodus gebunden

php中世界最好的语言
php中世界最好的语言Original
2018-06-06 17:41:491446Durchsuche

Dieses Mal werde ich Ihnen die Bindung des Anrufmodus vorstellen. Was sind die Vorsichtsmaßnahmen für die Bindung des Anrufmodus? Das Folgende ist ein praktischer Fall.

Aufrufaufruf

Rufen Sie eine Funktion auf, um die Ausführung der aktuellen Funktion anzuhalten und Steuerung und Parameter an die neue Funktion zu übergeben.

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 auf, in dem er aufgerufen wird. Mit der Aufrufmethode können verschiedene Aufrufmuster 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

Methode: Die Funktion wird als Attribut des Objekts gespeichert. Wenn die Methode aufgerufen wird, wird diese an das Objekt gebunden

Öffentliche Methode: Methode zum Abrufen des Kontexts des Objekts, zu dem sie gehören, über diese

myObject.increment(); 
document.writeln(myObject.value); //

zugrunde liegende Implementierung: myObject.increment。call(myObject,0);

2 Das Funktionsaufrufmuster Funktionsaufrufmuster

Wenn die Funktion kein Attribut des Objekts ist, wird sie als Funktion aufgerufen (etwas Unsinn...), Dies ist an das globale Objekt (Fenster) gebunden

In diesem Modus gibt es einen neuen strikten Modus, um Probleme so früh wie möglich aufzudecken und das Debuggen zu erleichtern. Dies ist an undefiniert gebunden

var add = function (a,b) { return a + b;}; 
var sum = add(3,4);// sum的值为7

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 von new zurückgegebene Objekt

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 Das Apply-Aufrufmuster

Apply und Call sind beide integrierte Parameter von Javascript Davon wird diese Bindung sofort in eine Funktion geändert. Der erstere Parameter ist ein Array, der letztere muss einzeln übergeben werden. apply wird auch durch den Aufruf der untersten Ebene implementiert

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 ist die Bindungsfunktion trennt die Bindung an die Funktion und den Aufruf der Funktion, sodass Funktionen in einem bestimmten Kontext aufgerufen werden können, insbesondere die Apply-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]... 
};

Ich glaube, Sie haben die Methode gemeistert, nachdem Sie den Fall in diesem Artikel gelesen haben Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

NodeJS-Betriebs-Excel-Datei

Wie man am unteren Rand der Folie unendlich viele Ladedatenanforderungen stellt Seite

Das obige ist der detaillierte Inhalt vonDaran ist der Aufrufmodus gebunden. 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