Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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 在节点红色中,为什么继续使用关键字';这';保存后';s值多少?_Javascript_Node.js_Node Red - Fatal编程技术网

Javascript 在节点红色中,为什么继续使用关键字';这';保存后';s值多少?

Javascript 在节点红色中,为什么继续使用关键字';这';保存后';s值多少?,javascript,node.js,node-red,Javascript,Node.js,Node Red,我正在学习如何按照教程创建自己的节点红色节点。如果查看下面的内容,可以看到此保存在变量节点中,以便在收到“输入”事件时发送消息。这很好,但是为什么继续使用this来注册“输入”事件呢 module.exports = function(RED) { function LowerCaseNode(config) { RED.nodes.createNode(this,config); var node = this; this.on('inp

我正在学习如何按照教程创建自己的节点红色节点。如果查看下面的内容,可以看到
保存在变量
节点
中,以便在收到“输入”事件时发送消息。这很好,但是为什么继续使用
this
来注册“输入”事件呢

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        this.on('input', function(msg) {
            msg.payload = msg.payload.toLowerCase();
            node.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}

我们不能将
this.on('input',function(msg)
替换为
node.on('input',function(msg)
)?

当然可以,但是为什么呢?存储
节点的唯一原因是我们可以在闭包中使用它,而这就是我们将使用它的地方,而且只有在那里。注意,还有许多解决方案根本不需要额外的变量。在现代代码(ES6)中,它们实际上更可取。

我们当然可以,但为什么呢?存储
节点的唯一原因是我们可以在闭包中使用它,而这就是我们将使用它的地方,而且只有在那里。请注意,还有许多解决方案根本不需要额外的变量。在现代代码(ES6)中实际上,它们更可取

我们不能用node.on('input',function(msg)替换这个.on('input',function(msg)

是的,你可以

这很好,但是为什么还要继续使用它来注册“输入”事件呢

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        this.on('input', function(msg) {
            msg.payload = msg.payload.toLowerCase();
            node.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}
当您选择将
分配给另一个变量以便在闭包中使用时,通常有两种类型的编码

Style#1在函数顶部指定新变量,然后在函数中的任何位置使用它

Style#2-仅在
不是所需值的闭包中使用新变量

我在实践中看到了这两种方法,因此这实际上只是您喜欢的个人风格的问题。例如,关于以
var me=this;
开头,然后在函数中的任何地方使用
me
的方法

就我个人而言,我更喜欢style#2,因为我认为当您在任何地方使用
this
时,代码都更容易解释

当然,在ES6环境中或从ES6传输时,可以使用箭头函数来保留
this
的词法值,以便在闭包中使用:

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        this.on('input', msg => {
            msg.payload = msg.payload.toLowerCase();
            this.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}
如果您将此称为样式#3,这是我的最爱,因为ES6中的编码是一个选项,并且在该函数中没有需要访问的
的其他值

仅供参考,还可以在函数上使用
.bind()
来设置
的值

我们不能用node.on('input',function(msg)替换这个.on('input',function(msg)

是的,你可以

这很好,但是为什么还要继续使用它来注册“输入”事件呢

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        this.on('input', function(msg) {
            msg.payload = msg.payload.toLowerCase();
            node.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}
当您选择将
分配给另一个变量以便在闭包中使用时,通常有两种类型的编码

Style#1在函数顶部指定新变量,然后在函数中的任何位置使用它

Style#2-仅在
不是所需值的闭包中使用新变量

我在实践中看到了这两种方法,因此这实际上只是您喜欢的个人风格的问题。例如,关于以
var me=this;
开头,然后在函数中的任何地方使用
me
的方法

就我个人而言,我更喜欢style#2,因为我认为当您在任何地方使用
this
时,代码都更容易解释

当然,在ES6环境中或从ES6传输时,可以使用箭头函数来保留
this
的词法值,以便在闭包中使用:

module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        this.on('input', msg => {
            msg.payload = msg.payload.toLowerCase();
            this.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}
如果您将此称为样式#3,这是我的最爱,因为ES6中的编码是一个选项,并且在该函数中没有需要访问的
的其他值


仅供参考,我们也可以在函数上使用
.bind()
来设置
这个
的值。

我们不能也用
RED.nodes.createNode(这个,配置);
替换为
RED.nodes.createNode(节点,配置);
替换为
RED.nodes.createNode.createNode(节点,配置);
(node,config);
?为了完整起见,在最新版本之前,node RED仍然支持node 0.10,因此ES6功能不可用。因此,这一特定模式非常明显。我之所以问这个问题,是因为我看到了在闭包之外使用
node
的代码库(这里可以使用
this
。@tchau.dev考虑到它在执行上绝对没有区别,它可以归结为个人偏好。在
node
的情况下,它甚至可以输入相同数量的字母。然而,我认为
this
作为一个标识符非常突出,而且很清楚(按照惯例)它引用了实例,因此代码可读性和一致性更好,不会在每个类中使用不同的标识符回答。这很好。我最不想听到的是特定于node red的内容。谢谢。为了完整起见,在最新版本之前,node red仍然支持node 0.10,因此ES6功能不可用。因此,为什么这种特定模式如此明显。我问这个问题的原因是因为我看到了代码库,其中
节点
在闭包外部使用(其中可以使用
).@tchau.dev考虑到它在执行上绝对没有区别,它归结为个人偏好。在
节点
的情况下,它甚至需要输入相同数量的字母。然而,我认为
这个
作为一个标识符很突出,而且很清楚(按照惯例)它引用实例,因此它使得代码更加可读和一致,而不使用不同的标识符