2017-02-05 15 views
1
日の

だと思う()オブジェクト:Javascriptでオブジェクト算術を実装するためのネイティブサポートはありますか?

theseClovers = new Clovers(); 
theseClovers.count = 10; 
thoseClovers = new Clovers(); 
thoseClovers.count = 4; 

theseClovers - thoseClovers; //returns b = new Clovers(); b.count = 6 

は、これは私がそれを考える方法です(ただし、次のとおりです。

thisDate = new Date() 
thatDate = new Date() 
thisDate - thatDate //returns some date object 

私はいくつかのオブジェクトを作成することは可能でしょう、Clovers()ように言います)完全に仮想的な:

function Clovers(){ 
    onSubtract(b){ 
     if(b instanceOf someClass){ 
      return this.count - b.count 
     } 
    } 
} 
+2

あなたがオブジェクトに '.valueOf()'関数(またはプロトタイプ)を追加することができます。数字以外の '.toString()'のようなものです。 – Pointy

+1

の可能性のある重複した[JavaScriptでオーバーロード算術演算子?](http://stackoverflow.com/questions/1634341/overloading-arithmetic-operators-in-javascript) –

答えて

2
function Clovers(val){ 
    this.count=val || 0; 
} 
Clovers.prototype.valueOf=function(){ 
return this.count; 
}; 

だから、それはかなりsimilaを働くだろうR:

alert(new Clovers(new Clovers(10)-new Clovers(5)).count); 
//or long written: 
var a=new Clovers(10); 
var b=new Clovers(4); 
var c=new Clovers(a-b); 
alert(c.count); 

しかし、Array.prototype.concatに類似しているため、カスタム付加機能を、持っている方が良いかもしれません。このような

Clovers.prototype.concat=function(clover){ 
    return new Clovers(this.count-clover.count); 
}; 

用途:

var a=new Clovers(10); 
var b=new Clovers(5); 
var c=a.concat(b); 
alert(c.count); 

アイデアのための先のとがったとカール・ヨハンシェーグレンのおかげで...

+0

私は実際のvalueOf()をオーバーロードするの最初の技術を好みます。 'Date() - Date()'が実際に値を返すので、これはDateが正しく動作する方法です。これは完璧です!魚をありがとう! – Sancarn

+0

@Sancarn youreようこそ;)。答えとしてマークしてください...そして、ところで、実際にはオーバーロードしていない、そのオーバーライド –

+0

私はチェックマークを探していた、それを見なかったxD – Sancarn

関連する問題