JavaScript

Function.prototype.call()メソッド

 編集:2022.08.12 by T.A.

関数を呼び出し、指定の this 値と指定の引数を渡します。

func.call([thisArg[, arg1, arg2, ...argN]])
func 呼び出す関数
thisArg func が呼び出されたときに this として使用される値です。

注意: 特定の場面では、thisArg はメソッドから見える実際の値でない場合があります。
もし、そのメソッドが厳格モードの関数ではなかった場合、null と undefined はグローバル・オブジェクトで置き換えられ、プリミティブ値はオブジェクトに変換されます。

argn 呼び出し先の関数に渡される引数です。

戻り値: this の値と引数を指定して関数を呼び出した結果です。

call() はあるオブジェクトに所属する関数やメソッドを、別なオブジェクトに割り当てて呼び出すことができます。

call() は関数やメソッドに this の新しい値を提供します。call() によって、いったんメソッドを書いてから、新しいオブジェクトへメソッドを描き直さずに他のオブジェクトへと継承することができます。

注: このメソッドの構文は apply() とほぼ同じですが、基本的な違いは call() が引数リストを受け取るのに対して、apply() は引数の単一の配列を受け取る点です。

call を使用して(Java と同様に)オブジェクトのコンストラクターを連鎖させることができます。

下記の例では、Product オブジェクトのコンストラクターは name と price の二つの引数で定義されています。
他の Food と Toy の二つの関数は、Product を呼び出して this と name と price を渡します。Product は name と price プロパティを初期化し、どちらも特化した関数が category を定義します:

function Product(name, price) {
  this.name = name;
  this.price = price;
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}

const cheese = new Food('feta', 5);
const fun = new Toy('robot', 40);
function Job(P1, P2){
  return this + ":" + P1 + ":" + P2
}
D=Job.call(10, 20, 30); //="10:20:30"

テスト