- ベストアンサー
【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では、できないものでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>{x: x,y: y}と定義したオブジェクトに対する『-』や『+』を再定義する事はjavascriptでは、できないものでしょうか? No.1の方の参考URL先にもありますように、javascriptでは演算子のオーバーライドを行う事は言語の仕様上行えません。 確かにこういった実装が行えれば便利だし、楽しそうですが・・ こればかりは我慢するしかないかと思います。
その他の回答 (2)
- heikuu2009
- ベストアンサー率33% (5/15)
ご自身で関数を定義するほかはないでしょう。 関数に簡単な名前を用いれば、「+」や「-」と比べても そこまで記述量に変化はないはずです。
お礼
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)
http://www.mozilla-japan.org/js/language/js20/rationale/operators.html これのことでしょうか? 下のほうに例が載ってます
お礼
tasohさん、ご回答ありがとうございました。 ご提示して頂いたURLの『演算子のオーバーライド』ってのが、そうなのかもしれませんが、よくよく読んでみましたが、ちょっとコレではやりたい事が出来ませんでしたが、アドバイスありがとうございました。
お礼
a0205sさん ご回答ありがとうございます。 そうですか、できないですか。 そう言って頂けると、あきらめがついて助かります。