【发布时间】:2017-12-26 16:01:08
【问题描述】:
第一个按预期工作:
var f1 = Object.getOwnPropertyNames(Function)
.forEach(function(element) {
console.log (typeof Function[element]);
}); // --> number, string, function
第二个输出错误信息:
var f2 = Object.getOwnPropertyNames(Function.prototype)
.forEach(function(element) {
console.log (typeof Function.prototype[element]);
});
TypeError: 'caller'、'callee' 和 'arguments' 属性可能无法在严格模式下访问
我怎样才能绕过它?
编辑:当前解决方法
var forbiddenOnStrictMode = ['caller', 'callee', 'arguments'];
var f2 = Object.getOwnPropertyNames(Function.prototype)
.forEach(function(element) {
if (forbiddenOnStrictMode.indexOf(element) == -1)
console.log (typeof Function.prototype[element]);
});
可以说node-compiler暂时忽略严格模式吗?
【问题讨论】:
-
这段代码的上下文是什么?首先是什么迫使它进入严格模式?它在类方法定义中吗?据我所知,您不能“取消定义”严格模式,但也许您可以将代码移到其他不处于严格模式的地方并调用它。
-
我只是想为 JS-Function-methods 生成一个文档(如果
Function.prototype[whatever] == 'function'然后在文档中创建一个标题。但是例如Function.prototype.caller 在严格模式下无法访问(=default模式),因此您无法访问现有方法,因为编译器说 NO。 -
我想问的问题是这段代码里面是什么,为什么它处于严格模式? node.js 代码默认情况下不处于严格模式,因此您正在做的事情是使其处于严格模式。我想知道为什么它处于严格模式。代码的什么上下文使它处于严格模式?您也许可以将此代码移出严格模式并调用它。
-
您可以在浏览器的控制台中尝试以下操作:
Object.getOwnPropertyNames(Function.prototype).forEach(function(element) {console.log (typeof Function.prototype[element]);})Copy+paste+Enter -
你没有回答我的问题——我不明白为什么。浏览器控制台是一个非标准的地方,所以我不会尝试解决或解释控制台中的任何内容。如果你有真正的代码,你需要帮助解决一个真正的问题,然后显示真实代码的上下文。否则,我将继续处理一个真正的问题,以便在其他地方解决。
标签: javascript node.js function strict-mode