1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的アウトプットカレンダーAdvent Calendar 2024

Day 3

【JavaScript】bind()について

Last updated at Posted at 2024-12-02

以前、HTML5プロフェッショナル認定試験の学習をしていた際bind()というものが出てきました。

存在は知っていましたが、実際に使用した経験がなかったため今回調べてみました。

bind()とは

bind()とは一体何でしょうか。

MDNには下記のように記載されています。

bind() メソッドは新しい関数を生成し、これは呼び出された際に this キーワードに指定された値が設定されます。この値は新しい関数が呼び出されたとき、一連の引数の前に置かれます。

どうやらbind()

  • 新しい関数を生成する
  • thisに関係する

ようです。

では実際、どのように使用するのか見ていきましょう。

使用例

例えばbind()を使用せずに関数内でthisを参照する場合、挙動が意図と異なる場合がありますが、bind()を使用すれば解決します。

bind() を使用しない場合

下記の例では、関数greetperson.helloに代入していますが、greet()を呼び出すとthispersonオブジェクトを参照していないためundefinedになります。

const person = {
  name: "Kenny",
  hello: function(){
    console.log(`Hello, my name is ${this.name}`);
  }
};

const greet = person.hello;
greet(); // "Hello, my name is undifined"

bind() を使用する場合

一方、bind()を使用することで関数hellopersonオブジェクトに結び付けることができます。
これにより、greet()を実行したときにthisが常にpersonオブジェクトを指すためにthis.nameKennyとなります。

const person = {
  name: "Kenny",
  hello: function() {
    console.log(`Hello, my name is ${this.name}`);
 }
};

const greet = person.hello.bind(person);
greet(); // "Hello, my name is Kenny"

bind() の引数を指定する場合

bind()は引数を取ることもできます。

次のように記述することで、
対象の関数のthisの参照先を変更した関数を新たに生成することができます。

bind(thisArg, arg1, …, argN)

引数 説明
第一引数 thisの参照先
第二引数以降 関数で使用する引数

下記は引数を指定する場合の例です。

function introduce(greeting, punctuation) {
  console.log(`${greeting}, my name is ${this.name}${punctuation}`);
}

const person = {name: "Kenny"};

const bindIntroduce = introduce.bind(person, "Merhaba", "!");
bindIntroduce(); // Merhaba, my name is Kenny!

まとめ

bind()は意図したオブジェクトをthisとして使用できるようにするのですね。

メリットとしては下記のようなものがあげられるかなと思います。

  • thisの中身を固定できるので予期せぬthisの変更を防ぐことができる
  • 設定を保持した関数を作成できるので再利用できる

それでは。

参考文献

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?