JavaScript链接函数,最后一个方法返回'undefined'

时间:2015-08-06 18:53:54

标签: javascript scope chain

我的应用会收到一个也加密的base64编码值。数据可以有几种不同的方式,因此我想创建可链式的方法来保持代码的清洁和模块化。

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

当我运行代码时,最后一个属性方法“finallyDecrypt”将返回undefined。

为什么“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;

    }
};

1 个答案:

答案 0 :(得分:0)

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

int[] input = new int[] { 1, 2, 3, -1, 1, 3, -2, 3, 4 }; // a list is easier to use dynamic sizes List<int> sums = new List<int>(); // the sum to the next negative number int tmp_sum = 0; // loop through foreach(int _element in input) { if(_element <= 0 ) { if(tmp_sum > 0) { // negative element found, so save the sum if it is bigger than 0 sums.Add(tmp_sum); tmp_sum = 0; } } else { // keep summing up tmp_sum += _element; } } //save the last one, if it is bigger than 0 if(tmp_sum > 0) sums.Add(tmp_sum); // convert to an array int[] result = sums.ToArray(); != decryptionChain如果问题只是一个拼写错误,那么请忽略,如果不是,请为此付出代价。

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

其次,不要使用string as a Boolean

第三,您似乎遇到decryptChain的问题,请在返回之前分配(不必要,但更简单)