5

Javascript の経験は豊富でしたが、Objective JavaScript は初めてです。ここでパラメーターを calc クロージャーに渡すにはどうすればよいですか?

var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

    console.log(calc.divide());

パラメータを calc のように渡したい (calc.multiply(10,20));

前もって感謝します..

4

7 に答える 7

2

あなたの呼び出し方法によるとcalc.multiply(a, b):次のようになるはずです:

var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

console.log(calc.divide(20, 2));
于 2012-09-06T20:21:47.250 に答える
2

これが簡単な方法です!

var calc = function(a,b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
};

//console.log(calc.divide());
//I want to pass the parameters to calc like (calc.multiply(10,20));

calc(10,20).multiply();

それ以外の場合は、正式な引数を受け入れるように各メソッドを変更する必要があります...

于 2012-09-06T20:21:52.313 に答える
1
var calc = function(a,b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
};
于 2012-09-07T18:02:27.570 に答える
0

次のような意味ですか。

var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function(n, d) {
            if (n != 0) return n / d
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

alert(calc.divide(3, 4));​
于 2012-09-06T20:21:59.707 に答える
0

以下のコードはあなたのために働くはずです:

var calc = (function() {
    var a = 5;
    var b = 0;

    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b !== 0) return a / b;
            else {
                alert('division by zero');
                return false;
            }
        }
    };
})();

console.log(calc.multiply(10, 10));

私が行った編集は、返された各関数の設定aとパラメーターであり、厳密にすることで関数bのゼロとの比較をより安全にしました。divide

お役に立てれば。

于 2012-09-06T20:22:15.263 に答える
0
var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

ただし、アラートをエラーをスローするように変更することを検討します。

于 2012-09-06T20:22:32.753 に答える
0

パラメータを に渡してcalc、2 つの数値で何かを計算するオブジェクトを返すか、何かをcalc計算する関数でオブジェクトを作成することができます。あなたの要件calc.multiply(10,20)は、2番目のソリューションです。

var calc = {
    add: function(a, b) {
        return a + b;
    },
    subtract: function(a, b) {
        return a - b;
    },
    multiply: function(a, b) {
        return a * b;
    },
    divide: function(a, b) {
        if (b != 0) return a / b
        alert('division by zero');
        return false;
    }
};​

それ以外の場合、 を使用するためにcalc(10,20).multiply()、既に持っているクロージャーを構築しますが、2 つのローカル定数の代わりにパラメーターを使用します。

function calc(a, b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            alert('division by zero');
            return false;
        }
    };
}
于 2012-09-06T20:26:31.287 に答える