是否“使用严格的”?在构造函数中扩展到原型方法

Does "use strict" in the constructor extend to prototype methods?

本文关键字:构造函数 扩展到 方法 原型 使用严格的 是否      更新时间:2023-09-26

我想弄清楚"use strict"的定义是否扩展到构造函数的原型方法。例子:

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();
}

这是否意味着原型方法继承了构造函数的严格模式?

No.

严格模式确实扩展到所有后代(读:嵌套)作用域,但由于您的fetch函数不是在构造函数中创建的,因此它不是继承的。你需要在每个原型方法中重复这个指令。

相反,当构造函数处于严格模式时,

特权方法将处于严格模式。为了避免在您的情况下重复,您可以

  • a)通过将指令移动到脚本的第一行使整个程序严格,或者
  • b)将你的类包装在一个模块IIFE中,并使其严格:

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