Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Function_Node.js - Fatal编程技术网

Javascript 具有相同变量名的两个不同函数如何工作?

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() {

这是node.js中的。这个代码像广告上说的那样工作,但我不明白怎么做

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模块使用了子进程库。当它产生一个新的子进程时,这些变量在一个独立的作用域中。这个概念和这个答案是一样的。