看看这种奇怪的行为:
/tmp$ node -v
v0.10.31
/tmp$ cat foo.js
function FooBar() {
this.some_method = function() {
return 42
}
}
var class_name = "FooBar"
console.log((new this[class_name]).some_method())
/tmp$ node < foo.js
42
/tmp$ node foo.js
/tmp/foo.js:7
console.log((new this[class_name]).some_method())
^
TypeError: undefined is not a function
at Object.<anonymous> (/tmp/foo.js:7:14)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
为什么节点在从文件执行代码时忘记了其全局this
对象的内容,而不是从STDIN执行?
答案 0 :(得分:4)
this
设置为exports
/ module.exports
(尽管应使用后两者)。
所以你的代码目前相当于:
console.log((new exports[class_name]).some_method())
由于您未向exports
附加任何内容,因此找不到您的FooBar()
功能。