thisの値は呼び出し方によって値が変わりますが、3つのメソッドを使ってthisの値を意図的に操作することができます。
##call
function greeting(func1, func2) {
console.log(func1 + this.name + func2);
}
var myName = {
name: 't0shimaru'
}
greeting.call(myName, 'はじめまして! ', 'です!');
// → はじめまして! t0shimaruです!
第1引数をthisの値としたいオブジェクトを引数として指定します。
第2引数以降はgreeting関数の引数になります。
##apply
function greeting(func1, func2) {
console.log(func1 + this.name + func2);
}
var myName = {
name: 't0shimaru'
}
greeting.apply(myName, ['はじめまして! ', 'です!']);
// → はじめまして! t0shimaruです!
applyはcallと同じように使うことができますが、第2引数以降を配列として受け取ることができます。
##bind
bindは上記2つのメソッドと違い、呼び出されたときに新しい関数を作成して、値を操作します。
以下の例では、変数に関数を代入してその変数から呼び出しています。
第2引数以降にも値を指定することで、関数の引数として渡すことができます。
function greeting(func1, func2) {
console.log(func1 + this.name + func2);
}
var myName = {
name: 't0shimaru'
}
var newGreeting = greeting.bind(myName);
newGreeting('はじめまして! ', 'です!');
// → はじめまして! t0shimaruです!
以上、自己紹介(?)を兼ねたメソッドの使い方でした!