Ein Code, der Funktionen bereitstellt, die von bestimmten Browsern oder Umgebungen nicht nativ unterstützt werden. Einfach ausgedrückt: ein Browser-Falback.
Bevor Sie Polyfills für die Methoden call(), apply() und bind() schreiben, überprüfen Sie bitte die Funktionalität von call, apply und bind.
let details = { name: 'Manoj', location: 'Chennai' } let getDetails = function (...args) { return `${this.name} from ${this.location}${args.join(', ') ? `, ${args.join(', ')}` : ''}`; }
1. Aufrufmethode:
Lassen Sie uns eine Polyfüllung für call() erstellen. Wir fügen dem Function.prototype eine benutzerdefinierte call-Methode hinzu, um sie für alle Funktionen zugänglich zu machen.
getDetails.call(details, 'Tamil Nadu', 'India'); // Manoj from Chennai, Tamil Nadu, India // Polyfill Function.prototype.myCall = function (ref, ...args) { if (typeof Function.prototype.call === 'function') { // Checks whether the browser supports call method return this.call(ref, ...args); } else { ref = ref || globalThis; let funcName = Math.random(); // Random is used to overwriting a function name while (ref.funcName) { funcName = Math.random(); } ref[funcName] = this; let result = ref[funcName](...args); delete ref[funcName]; return result; } } getDetails.myCall(details, 'Tamil Nadu', 'India'); // Manoj from Chennai, Tamil Nadu, India
2. Methode anwenden:
Lassen Sie uns eine Polyfüllung für apply() erstellen. Wir fügen dem Function.prototype eine benutzerdefinierte apply-Methode hinzu, um sie für alle Funktionen zugänglich zu machen.
getDetails.apply(details, ['Tamil Nadu', 'India']); // Manoj from Chennai, Tamil Nadu, India // Polyfill Function.prototype.myApply = function (ref, args) { if (typeof Function.prototype.apply === 'function') { // Checks whether the browser supports call method this.apply(ref, args); } else { ref = ref || globalThis; let funcName = Math.random(); // Random is to avoid duplication while (ref.funcName) { funcName = Math.random(); } ref[funcName] = this; let result = ref[funcName](args); delete ref[funcName]; return result; } } getDetails.myApply(details, 'Tamil Nadu', 'India'); // Manoj from Chennai, Tamil Nadu, India
3. Bindungsmethode
Lassen Sie uns eine Polyfüllung für bind() erstellen. Wir fügen dem Function.prototype eine benutzerdefinierte bind-Methode hinzu, um sie für alle Funktionen zugänglich zu machen.
let getFullDetails = getDetails.bind(details, 'Tamil Nadu'); getFullDetails(); // Manoj from Chennai, Tamil Nadu getFullDetails('India'); // Manoj from Chennai, Tamil Nadu, India // Polyfill Function.prototype.myBind = function (ref, ...args) { if (typeof Function.prototype.bind === 'function') { return this.bind(ref, ...args); } else { let fn = this; return function (...args2) { return fn.apply(ref, [...args, ...args2]); // Merge and apply arguments } } } let getFullDetails = getDetails.myBind(details, 'Tamil Nadu'); // Manoj from Chennai, Tamil Nadu getFullDetails('India'); // Manoj from Chennai, Tamil Nadu, India
Vielen Dank fürs Lesen! Ich hoffe, Sie fanden diesen Blog informativ und ansprechend. Wenn Ihnen Ungenauigkeiten auffallen oder Sie Feedback haben, zögern Sie bitte nicht, mir dies mitzuteilen.
Das obige ist der detaillierte Inhalt vonPolyfills schreiben – Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!