LoginSignup
0
0

More than 1 year has passed since last update.

【JavaScript】関数とオブジェクト⑥ call,applyとthis

Posted at

はじめに

Udemyの【JS】ガチで学びたい人のためのJavaScriptメカニズムの講座の振り返りです。

前回の記事

目的

  • 関数とオブジェクトについての理解を深める

本題

1.前回のおさらい

bind
"this"や引数の参照先を変更。
使用時点では実行しない。

call,apply
"this"や引数の参照先を変更。
同時に関数を実行する。

// aという関数を定義
function a(){
    // 関数の中でthisが7行目でbindされている
    console.log("hello " + this.name);
}
const b = a.bind({name: "キルア"});
// hello キルアと出力
b();

callとapply

例1

bindとcall、applyの比較

function a(){
    console.log("hello " + this.name);
}
// bindの中身のオブジェクトを変数killに格納
const kill = {name: "キルア"};

// bindの場合はb();がないと実行されなかった
const b = a.bind(kill);
b();
// applyの場合は第一引数に変数をいれれば実行までしてくれる
a.apply(kill);
// callの場合も同様
a.call(kill);

例2

callとapplyの比較

callの場合

callでは第2引数以下に関数の引数を定義することができる

function a(name){
    // thisを削除して関数の引数にnameを定義
    console.log("hello " + name);
}
const kill = {name: "キルア"};
// 第2引数に「キルア」と入れると「hello キルア」と実行される
a.call(kill, "キルア");
applyの場合

applyでは第2引数以下に配列を定義できる

// nameの他に,name1を定義
function a(name,name1){
    console.log("hello " + name + ", " + name1);
}
const kill = {name: "キルア"};

// 配列の場合[]に入れ,name1がアルカにあたる
// 配列が展開されてそれぞれaの引数に渡っていく
a.apply(kill, ["キルア", "アルカ"]);

例3

より実践的なapplyの利用方法

// 配列を定義
// 1番大きい数字を取り出したい
const array = [1,2,3,4,5];
// Mathオブジェクトのメソッドmaxを使うとコンソールで2と出力される
Math.max(1,2)
// 数が多く展開するのが面倒な時applyを使う
// 第一引数にthisは必要ないのでnullにしておく
// 第二引数は配列を定義し、それを変数に代入
const result = Math.max.apply(null, array);
// 5と出力される
console.log(result);
// ES6以降では基本的には下記のように使う
// ...を3つ書くとMathの引数を1つずつ展開するという操作が行われる(apply消す)
const result = Math.max(...array);
console.log(result);

Mathについて

組み込み関数とは、JavaScrip側であらかじめ用意してくれているオブジェクトのことです。Mathオブジェクトは、組み込み関数の1つで、数値計算を扱う際に使います。

今日はここまで!

参考にさせて頂いた記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0