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?

È stato utile?

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
scroll top