Javascript 具有相同变量名的两个不同函数如何工作?
这是node.js中的。这个代码像广告上说的那样工作,但我不明白怎么做 在Javascript 具有相同变量名的两个不同函数如何工作?,javascript,function,node.js,Javascript,Function,Node.js,这是node.js中的。这个代码像广告上说的那样工作,但我不明白怎么做 在master.js中创建web工作程序(如w),它具有w.onmessage=function…。 但是在定义web工作者的foo.js中,已经有一个onmessage=function… 我遗漏了一些基本的东西,但问题是:master.jsw.onmessage为什么不覆盖原始的foo.jsonmessage master.js foo/foo.js 如果您有一个代码如下的模块: func = function() {
master.js
中创建web工作程序(如w
),它具有w.onmessage=function…
。
但是在定义web工作者的foo.js
中,已经有一个onmessage=function…
我遗漏了一些基本的东西,但问题是:master.js
w.onmessage
为什么不覆盖原始的foo.js
onmessage
master.js
foo/foo.js
如果您有一个代码如下的模块:
func = function() {
console.log('function called');
};
var module=require('./module');
module.func = function() {
console.log('was it overwritten?');
};
并要求如下:
func = function() {
console.log('function called');
};
var module=require('./module');
module.func = function() {
console.log('was it overwritten?');
};
然后module.func
将是未定义的
。这是因为func
被分配给模块的全局范围。当您调用require
时,您将获得对模块的导出的引用,而不是对模块全局的引用。因此,当您设置module.func
时,可以这样说:
func = function() {
console.log('function called');
};
var module=require('./module');
module.func = function() {
console.log('was it overwritten?');
};
…然后模块的导出将确实反映新功能,但它从未触及模块的全局。因为当您在对象实例中进行更改时,您不会更改其原型(类)(阅读关于js对象模型的内容)。如果要更改父对象的行为,请键入以下内容:
w.prototype.onmessage=function(){/*…您的代码…*/};
JS对象模型允许您覆盖每个对象的方法,以更改其行为,但不影响此更改的安全原型。习惯
当您加载模块时,它在隔离的作用域中运行,所以若不直接更改所需对象,您将无法访问sys函数。这将帮助您理解nodejs的模块模型,请尝试运行它:
require.js
module.exports={};
main.js
var x=require('./require.js');
x、 告诉=真实;
var y=require('./require.js');
y、 告诉=假;
log(require('./require.js'));
我不认为这是出口的一部分,也不需要。foo.js不导出任何内容,并且主机也不“需要”foo.js。master.js使用foo.js创建了一个新的webworker(w)。@daniel:对不起;我把新员工
误读为要求
。无论如何,Worker
对象和Worker的全局对象可能是独立的对象。看起来Worker模块使用了子进程库。当它产生一个新的子进程时,这些变量在一个独立的作用域中。这个概念和这个答案是一样的。