O “use strict” no construtor se estende aos métodos de protótipo?
-
21-12-2019 - |
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?
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