【JavaScript】必要なメソッドを、継承を使わずにapplyでピンポイントに

callやapplyって、あるオブジェクトのメソッドであるかのように
関数を呼び出すことができるそうですね (´・∀・`)ヘー
(JavaScript第5版 p.138)


本で紹介されてたのは、数値が格納された配列の中から
簡単に最大値を見つける方法です。
Math.max()は与えられた複数の引数の中から配列を見つける関数ですが、
これを複数の引数ではなく、ひとつの配列を引数にとろう、と。


//applyを使わない通常の方法
var biggest = Math.max(20, 9, 15, 49, 97);

//applyを使うと、配列の中から探せる
var numbers = [20, 9, 15, 49, 97];
var biggest = Math.max.apply(null, numbers);
alert(biggest); //97


さて、ここからが本題です。
未熟ながらオブジェクト指向でプログラムを組んでいて、
次のような状況になりました。


あるクラスのメソッドをこちら側でも使いたいけど、継承するほどでもない。
かといって同じ処理を両方のクラスに記述するのは避けたい。
メソッドひとつだけのクラスを作り、それを両方で継承するのもなんだかなー。


というときに思いついたのがcall,applyを使う方法でした。
(今回はcallで)
まず、クラス1。引数、またはプロパティで足し算するメソッドがあります。


var Class1 = function(x, y){
this.a = x;
this.b = y;
};
Class1.prototype = {
plus:function(){
if(arguments.length){
this.a = arguments[0];
this.b = arguments[1];
}
alert(this.a + this.b);
}
};
クラス2。引数、またはプロパティで引き算をするメソッドがあります。

var Class2 = function(x, y){
this.c = x;
this.d = y;
};
Class2.prototype = {
minus:function(){
if(arguments.length){
this.c = arguments[0];
this.d = arguments[1];
}
alert(this.c - this.d);
}
};
インスタンスを作ります。

var c1 = new Class1(80, 20);
var c2 = new Class2(100, 900);
クラス1で、クラス2の引き算メソッドを使いたい場合は
c2.minus.call(c1, 30, 14);
c2.minus.call(c1, c1.a, c1.b);


こういう「ちょい借り」な目的で使っていいのでしょうか…?
Mっ気満々でツッコミをお待ちしておりますm(_ _)m