JavaScript链接函数,最后一个方法返回';未定义';

JavaScript链接函数,最后一个方法返回';未定义';,javascript,scope,chain,Javascript,Scope,Chain,我的应用程序接收一个base64编码值,该值也经过加密。数据可以以几种不同的方式出现,因此我想创建可链接的方法,以保持代码干净和模块化 我希望能够写:decryptionChain.decodeBase64(b64Value.stringToBuffer().finallyDecrypt() 当我运行代码时,最后一个属性方法“finallyDecrypt”返回为未定义 为什么“finallyDecrypt”方法返回为未定义?其余的都可以工作,如果我运行ecryptionChain.decodeB

我的应用程序接收一个base64编码值,该值也经过加密。数据可以以几种不同的方式出现,因此我想创建可链接的方法,以保持代码干净和模块化

我希望能够写:decryptionChain.decodeBase64(b64Value.stringToBuffer().finallyDecrypt()

当我运行代码时,最后一个属性方法“finallyDecrypt”返回为未定义

为什么“finallyDecrypt”方法返回为未定义?其余的都可以工作,如果我运行ecryptionChain.decodeBase64(b64Value.stringToBuffer(),我会得到预期的缓冲区。只有当finallyDecrypt被锁入时,我才会出错

代码如下:

   function decrypt(encrypted) {
    var decipher = crypto.createDecipheriv(algorithm, password, iv);
    decipher.setAuthTag(encrypted.tag);
    var dec = decipher.update(encrypted.content, 'hex', 'utf8');
    dec += decipher.final('utf8');
    return dec;
}

var decryptionChain = {

    currentValue:"",

    decodeBase64: function (encryptedValue){
        this.currentValue = new Buffer(encryptedValue.toString(), "base64");
        return this;
    },

    stringToBuffer: function() {
        if (this.currentValue) {
            myBuffer = JSON.parse(this.currentValue, function (key, value) {
                 return value && value.type === 'Buffer'
                    ? new Buffer(value.data)
                    : value;

            });

        }
        return myBuffer;
    },

    finallyDecrypt : function(myBuffer){
        if(myBuffer){
        decrypt(myBuffer);
        }
        return this;

    }
};

从显示的代码中,我发现了一些问题。首先:

解密链
!=
decryptChain
如果只是问题中的一个输入错误,请忽略,如果不是,请参考

请使用,以减少范围错误或“范围变量”被留下的可能性

第二,不要使用


第三,您似乎对
返回值&&value.type=='Buffer'有问题?新缓冲区(value.data):值,返回前请分配(不需要,但更简单)

从显示的代码中,我发现了一些问题。首先:

解密链
!=
decryptChain
如果只是问题中的一个输入错误,请忽略,如果不是,请参考

请使用,以减少范围错误或“范围变量”被留下的可能性

第二,不要使用


第三,您似乎对
返回值&&value.type=='Buffer'有问题?新缓冲区(value.data):值,请在返回前分配(不需要,但更简单)

请不要这样做。使用您提出的设计,可以很容易地调用
decryptChain.stringToBuffer().decodeBase64(b64Value)
decryptChain.finallyDecrypt().finallyDecrypt()
,这根本没有意义。使每个方法根据应该工作的给定信息返回不同的object.Hmmm。你能举个例子吗?它的node.js,Fiddle不支持它。不确定节点是否有类似小提琴的服务。快速谷歌搜索没有找到任何实际有效的东西。请不要这样做。使用您提出的设计,可以很容易地调用
decryptChain.stringToBuffer().decodeBase64(b64Value)
decryptChain.finallyDecrypt().finallyDecrypt()
,这根本没有意义。使每个方法根据应该工作的给定信息返回不同的object.Hmmm。你能举个例子吗?它的node.js,Fiddle不支持它。不确定节点是否有类似小提琴的服务。快速的谷歌搜索并没有发现任何实际有效的东西。