Означает ли «использование строги» в конструкторе простирается к методам прототипа?
-
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; }());
Не связан с StackOverflow