L'uso rigoroso nel costruttore si estende ai metodi prototipo?
-
21-12-2019 - |
Domanda
Sto cercando di capire se la definizione di "uso rigoroso" si estende ai metodi prototipo del costruttore.Esempio:
var MyNamespace = MyNamespace || {};
MyNamespace.Page = function() {
"use strict";
};
MyNamespace.Page.prototype = {
fetch : function() {
// do I need to use "use strict" here again?
}
};
Secondo Mozilla puoi usarlo come:
function strict(){
"use strict";
function nested() { return "And so am I!"; }
return "Hi! I'm a strict mode function! " + nested();
}
Significa che i metodi prototipo ereditano la modalità rigorosa dal costruttore?
Soluzione
NO.
La modalità rigorosa si estende a tutti i discendenti (leggi:nidificati) ambiti, ma dal momento che your fetch
la funzione non viene creata dentro il costruttore non viene ereditato.Dovresti ripetere la direttiva in ciascuno dei metodi prototipo.
I metodi privilegiati, al contrario, sarebbero in modalità rigorosa quando il costruttore è in modalità rigorosa.Per evitare ripetizioni nel tuo caso, puoi
- a) rendere rigoroso l'intero programma spostando la direttiva nella prima riga dello script, oppure
b) racchiudi la tua classe in un modulo IIFE e rendilo rigoroso:
… = (function() { "use strict"; function Page() { // inherits strictness } Page.prototype.fetch = function() { // inherits strictness }; return Page; }());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow