Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
88
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@39_isao

JavaScript bind,call,apply入門!

Js特訓中、標題の件で悩んだのでメモります。

bind,call,applyは
簡単に言うと なりすましができます。
持ってない機能を使えます

「thisの値を束縛する。」
「レシーバーオブジェクトを変更する。」なんて言うそうです。

具体例として下記コードで ペンギンに空を飛ばせます。

penguinFly.js
// ペンギンくん
var Penguin = {
    name: 'ペンギン',
};

// 鷹
var Falcon = {
    name: '',
    fly: function(){
        console.log(this.name + 'が大空を飛びました');
    }
};

Falcon.fly();  // '鷹が大空を飛びました

鷹は空を飛べるので、flyという関数を持っています。
ではまず、callとbindを使ってペンギンに空を飛ばせます。

penguinFly.js

// call 
Falcon.fly.call(Penguin); // ペンギンが大空を飛びました

// bind は一旦変数にしまって使う
var flyPenguin = Falcon.fly.bind(Penguin); 
flyPenguin(); // ペンギンが大空を飛びました

第一引数にthisにしたい値を入れて使います。
下記のように使うと引数を渡すこともできます。

penguinFly.js
// 引数ありバージョンに変更
Falcon.fly = function(aComment){
    console.log(this.name + '' + aComment + '大空を飛びました');
}

// call
Falcon.fly.call(Penguin, '元気よく');
// ペンギンが元気よく大空を飛びました

// bind
var flyPenguin = Falcon.fly.bind(Penguin, '元気よく');
flyPenguin();
// ペンギンが元気よく大空を飛びました

applyは基本的に使い方は同じですが、配列を渡せます。

penguinFly.js
Falcon.fly = function(comment1, comment2){
    console.log(this.name + '' + comment1 + comment2 + '大空を飛びました');
}

//call
Falcon.fly.call(Penguin, '思い切って', '元気よく');
// ペンギンが思い切って元気よく大空を飛びました

// apply 
Falcon.fly.apply(Penguin, ['思い切って', '元気よく']);
// ペンギンが思い切って元気よく大空を飛びました

以上です、
変なとこあったらご指摘ください〜
http://qiita.com/setzz/items/155af03120a330fd4437
これもわかりやすかったです!

88
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
88
Help us understand the problem. What is going on with this article?