Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是不是;使用“严格的”;在构造函数中扩展到原型方法?_Javascript_Strict_Use Strict - Fatal编程技术网

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

Javascript 是不是;使用“严格的”;在构造函数中扩展到原型方法?,javascript,strict,use-strict,Javascript,Strict,Use Strict,我试图弄清楚“use strict”的定义是否扩展到构造函数的原型方法。例如: var MyNamespace = MyNamespace || {}; MyNamespace.Page = function() { "use strict"; }; MyNamespace.Page.prototype = { fetch : function() { // do I need to use "use strict" here again?

我试图弄清楚“use strict”的定义是否扩展到构造函数的原型方法。例如:

var MyNamespace = MyNamespace || {};

MyNamespace.Page = function() {

    "use strict";

};

MyNamespace.Page.prototype = {

    fetch : function() {

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

    }

};
根据,您可以将其用作:

function strict(){

    "use strict";

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

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

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

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

相反,当构造函数处于严格模式时,特权方法将处于严格模式。为了避免重复您的案例,您可以

  • a) 通过将指令移动到脚本的第一行,或
  • b) 将类包装在模块IIFE中,并严格执行:

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

我很忙,有段时间没读过这篇文章,所以我不知道它是否有答案。但似乎相关:您可能想看看基本上
“use strict”
的作用域与函数中的普通变量类似。AFAIK
“use strict”
具有文字源代码作用域,与Javascript对对象方法的任何继承模型无关。严格模式仅适用于函数作用域和嵌套在其中的所有内容,这就是Mozilla代码片段所显示的内容。原型方法不在其构造函数的功能范围内,所以我怀疑它是否会继承它。这怎么会是重复的?建议的链接提到严格模式,但不在同一上下文中!!!清晰、简洁,建议一个好的解决方案。我唯一的想法是删除名称空间。另外,值得一提的是,建议的解决方案通常用于编译为JavaScript的语言,如CoffeeScript和TypeScript。您所说的“删除名称空间”是什么意思?仅供解释?请随意编辑代码,如果不喜欢,我会还原;-)