javascript運算符重載的實現


原文

今天在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可以比較大小<>+-/%*, 舉一反三

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM