Означает ли «использование строги» в конструкторе простирается к методам прототипа?

StackOverflow https://stackoverflow.com//questions/24035111

  •  21-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь выяснить, распространяется ли определение «использование строгим» к методам прототипа конструктора.Пример:

var MyNamespace = MyNamespace || {};

MyNamespace.Page = function() {

    "use strict";

};

MyNamespace.Page.prototype = {

    fetch : function() {

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

    }

};
.

Согласно mozilla Вы можете использовать его как:

.
function strict(){

    "use strict";

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

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

}
.

означает, что методы прототипа наследуют строгий режим от конструктора?

Это было полезно?

Решение

нет.

Строгий режим распространяется на весь потомк (читайте: вложенные) области, но поскольку ваша функция fetch не создается внутри конструктор, который он не унаследован.Вам нужно будет повторить директиву в каждом из методов прототипа.

Привилегированные методы напротив, будут в строгом режиме, когда конструктор находится в строгом режиме.Чтобы избежать повторения в вашем случае, вы можете

    .
  • а) сделать всю программу строго, перемещая директиву к первой строке скрипта или
  • b) Оберните свой класс в модуль iife и сделайте это строго:

    … = (function() {
        "use strict";
    
        function Page() {
            // inherits strictness
        }
        Page.prototype.fetch = function() {
            // inherits strictness
        };
        return Page;
    }());
    

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top