今天在51js上看到的花劍雪提到的運算符重載,出了以個題目如下:
var a=new Test(); a.setNumber(2); var b=new Test(); b.setNumber(3); if(a+b==5) alert("it works!");
的確,如果能重載'+', 問題就迎刃而解了, 想了一會, 每個object都有個toString方法, 將object轉換成string, 於是乎啊想了下面的實現方法:
<script> function Test() { var _this = this; this.nx = 0; this.setNumber = function(n) { _this.nx = n; } this.toString = function() { return _this.nx; } } var a=new Test(); a.setNumber(2); var b=new Test(); b.setNumber(3); alert(a+b) if(a+b==5) alert("it works!"); </script>
后面yangfion171 又有了valueOf的方法重載:
function Test() { this._num = 0; } Test.prototype.setNumber = function(num) { this._num = num; } Test.prototype.toString = function() { return "change to String"; } Test.prototype.valueOf = function() { return this._num; } var a=new Test(); a.setNumber(2); var b=new Test(); b.setNumber(3); if(a+b==5) alert("it works!"); alert(a * b); alert(a / b); alert(a); alert(b);
不管怎么重載,最重要的是這個運算符適合什么樣的數據類型, 只要把現有的對象的valueOf或者toString重載一下,返回前面說的數據類型就可以達到重載運算符的目的了, 就像兩個object可以比較大小<>+-/%*, 舉一反三