引数にエレメントを指定するとエレメントの座標を返す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では、できないものでしょうか?

A 回答 (3件)

>{x: x,y: y}と定義したオブジェクトに対する『-』や『+』を再定義する事はjavascriptでは、できないものでしょうか?



No.1の方の参考URL先にもありますように、javascriptでは演算子のオーバーライドを行う事は言語の仕様上行えません。

確かにこういった実装が行えれば便利だし、楽しそうですが・・
こればかりは我慢するしかないかと思います。
    • good
    • 0
この回答へのお礼

a0205sさん ご回答ありがとうございます。

そうですか、できないですか。
そう言って頂けると、あきらめがついて助かります。

お礼日時:2009/05/22 01:24

ご自身で関数を定義するほかはないでしょう。



関数に簡単な名前を用いれば、「+」や「-」と比べても
そこまで記述量に変化はないはずです。
    • good
    • 0
この回答へのお礼

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;と記述できたら、カッコイイかなぁと思いまして。

お礼日時:2009/05/20 16:28

http://www.mozilla-japan.org/js/language/js20/ra …

これのことでしょうか?
下のほうに例が載ってます

参考URL:http://www.mozilla-japan.org/js/language/js20/ra …
    • good
    • 0
この回答へのお礼

tasohさん、ご回答ありがとうございました。

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

お礼日時:2009/05/20 16:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報