Frage

Ich versuche herauszufinden, ob sich die Definition von „use strict“ auf die Prototypmethoden des Konstruktors erstreckt.Beispiel:

var MyNamespace = MyNamespace || {};

MyNamespace.Page = function() {

    "use strict";

};

MyNamespace.Page.prototype = {

    fetch : function() {

        // do I need to use "use strict" here again?

    }

};

Entsprechend Mozilla Sie können es verwenden als:

function strict(){

    "use strict";

    function nested() { return "And so am I!"; }

    return "Hi!  I'm a strict mode function!  " + nested();

}

Bedeutet das, dass Prototypmethoden den strikten Modus vom Konstruktor erben?

War es hilfreich?

Lösung

NEIN.

Der strikte Modus erstreckt sich auf alle Nachkommen (lesen Sie:verschachtelte) Bereiche, aber seit Ihrem fetch Funktion wird nicht erstellt innen Der Konstruktor wird nicht vererbt.Sie müssten die Direktive in jeder der Prototypmethoden wiederholen.

Im Gegensatz dazu wären privilegierte Methoden im strikten Modus, wenn sich der Konstruktor im strikten Modus befindet.Um Wiederholungen in Ihrem Fall zu vermeiden, können Sie dies tun

  • a) Machen Sie das gesamte Programm streng, indem Sie die Direktive in die erste Zeile des Skripts verschieben, oder
  • b) Packen Sie Ihre Klasse in ein IIFE-Modul ein und machen Sie es streng:

    … = (function() {
        "use strict";
    
        function Page() {
            // inherits strictness
        }
        Page.prototype.fetch = function() {
            // inherits strictness
        };
        return Page;
    }());
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top