Javascript 是不是;使用“严格的”;在构造函数中扩展到原型方法?
我试图弄清楚“use strict”的定义是否扩展到构造函数的原型方法。例如: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?
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。您所说的“删除名称空间”是什么意思?仅供解释?请随意编辑代码,如果不喜欢,我会还原;-)