JavaScript

めも


call

thisの参照元を変更して引数も渡せる関数

(他のオブジェクトのメソッドなどが使用できる上、引数も渡せるようになる関数と覚えています。)

間違っていたら教えてください。


使い方1

function Func(age){

this.age = age;
this.setName = function(name){
this.name = name;
}
}
var obj = new Func();
obj.setName("dokkoisho"); //setNameメソッドでname(メンバ)に値をセットする
obj; // Func {setName: ƒ, name: "dokkoisho"}
obj.name; // "dokkoisho"

var obj2 = {}; // オブジェクトを生成
obj2.setName('hakkeyoi'); // setNameなんてメソッド持ってないからもちろんエラー

obj.setName.call(obj2,"hakkeiyoi"); // callで objのsetNameメソッドをobj2で使う。
obj2
// {name: "hakkeiyoi"} ちゃんと name が追加されてる

function Func(age){

this.age = age;
this.setName = function(name){
this.name = name;
}
}
var obj3 = new Func(23);

obj3 // age:23となっている!
// Func {age: 23, setName: ƒ}

obj4 = {};
Func.call(obj4,33);
obj4 // {age: 33, setName: ƒ}


使い方2

function Func(age){

this.age = age;
this.setName = function(name){
this.name = name;
}
}

function Func2(age){
Func.call(this,age); // ここでcall使う。
}

obj5 = new Func2(333);
obj5 // Func2 {age: 333, setName: ƒ}

obj5.setName('mashimashi');
obj5 // Func2 {age: 333, setName: ƒ, name: "mashimashi"}