Pergunta

Estou tentando descobrir se a definição de 'use strict' se estende aos métodos protótipo do construtor.Exemplo:

var MyNamespace = MyNamespace || {};

MyNamespace.Page = function() {

    "use strict";

};

MyNamespace.Page.prototype = {

    fetch : function() {

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

    }

};

De acordo com Mozilla você pode usá-lo como:

function strict(){

    "use strict";

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

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

}

Isso significa que os métodos protótipo herdam o modo estrito do construtor?

Foi útil?

Solução

Não.

O modo estrito se estende a todos os descendentes (leia-se:aninhados) escopos, mas como seu fetch a função não foi criada dentro o construtor não é herdado.Você precisaria repetir a diretiva em cada um dos métodos de protótipo.

Os métodos privilegiados, por outro lado, estariam em modo estrito quando o construtor estivesse em modo estrito.Para evitar repetições no seu caso, você pode

  • a) tornar todo o programa rigoroso movendo a diretiva para a primeira linha do script, ou
  • b) envolva sua classe em um módulo IIFE e torne isso rigoroso:

    … = (function() {
        "use strict";
    
        function Page() {
            // inherits strictness
        }
        Page.prototype.fetch = function() {
            // inherits strictness
        };
        return Page;
    }());
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top