• ベストアンサー

【javascript】『-』や『+』を再定義したい。

引数にエレメントを指定するとエレメントの座標を返すfancitonを作りました。(行頭は全角スペースです。) function getLocation(element){  var x=0,y=0,p=element;  while(p){   x+=p.offsetLeft - p.scrollLeft;   y+=p.offsetTop - p.scrollTop;   p=p.offsetParent;  }  return {x: x,y: y}; }; たとえば、これを以下の様にして使うのですが、 locA=getLocation(getElementById("AAA")); locB=getLocation(getElementById("BBB")); locAとlocBの差分を求めたいとき、 def={x: (locA.x - locB.x),y: (locA.y - locB.y)} といちいち書かなくてはならず面倒です。 fanciton def(a,b){ return {x: (a.x-b.y),y: (a.y-b.y)}; }; のようなfancitonを作れば少しは楽になるでしょうけど、 def = locA - locB; と書けるようになると、イイなぁと思います。 {x: x,y: y}と定義したオブジェクトに対する『-』や『+』を再定義する事はjavascriptでは、できないものでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • a0205s
  • ベストアンサー率100% (4/4)
回答No.3

>{x: x,y: y}と定義したオブジェクトに対する『-』や『+』を再定義する事はjavascriptでは、できないものでしょうか? No.1の方の参考URL先にもありますように、javascriptでは演算子のオーバーライドを行う事は言語の仕様上行えません。 確かにこういった実装が行えれば便利だし、楽しそうですが・・ こればかりは我慢するしかないかと思います。

kingfruits
質問者

お礼

a0205sさん ご回答ありがとうございます。 そうですか、できないですか。 そう言って頂けると、あきらめがついて助かります。

その他の回答 (2)

回答No.2

ご自身で関数を定義するほかはないでしょう。 関数に簡単な名前を用いれば、「+」や「-」と比べても そこまで記述量に変化はないはずです。

kingfruits
質問者

お礼

heikuu2009さん、ご回答ありがとうございました。 >>ご自身で関数を定義するほかはないでしょう。 『+や-を関数として定義したい』が命題ですから、そうするほかないと いうか、そうしたいのです。 >>関数に簡単な名前を用いれば、「+」や「-」と比べても >>そこまで記述量に変化はないはずです。 簡単な名前のメソッドで書くと以下の様になりました。 <html> <head> <script type="text/javascript" src="prototype.js"></script> </head> <body> <script type="text/javascript"> var Loc = Class.create(); Loc.prototype = {  initialize: function(x,y){   this.x = x;   this.y = y;   return {x:x,y:y};  },  add: function(loc){   return {x: this.x+loc.x,y: this.y+loc.y};  },  sub: function(loc){   return {x: this.x-loc.x,y: this.y-loc.y};  } }; a= new Loc(5,10); b= new Loc(3,3); c=a.sub(b); alert(c.x + ':' + c.y); </script> </body> </html> 演算子『-』を再定義して、 c=a.sub(b); ではなく c=a-b; と書きたいのです。 ご指摘の様に、記述量に変化は大差ないのですが、c=a-b;と記述できたら、カッコイイかなぁと思いまして。

  • tasoh
  • ベストアンサー率45% (19/42)
回答No.1

http://www.mozilla-japan.org/js/language/js20/rationale/operators.html これのことでしょうか? 下のほうに例が載ってます

参考URL:
http://www.mozilla-japan.org/js/language/js20/rationale/operators.html
kingfruits
質問者

お礼

tasohさん、ご回答ありがとうございました。 ご提示して頂いたURLの『演算子のオーバーライド』ってのが、そうなのかもしれませんが、よくよく読んでみましたが、ちょっとコレではやりたい事が出来ませんでしたが、アドバイスありがとうございました。