1.コンストラクタなしでのthis
ソース例
var jikoshokai=function(){
console.log(“My name is”+this.name+”!!”);
}
//勇者オブジェクトのインスタンスbraveman1作成
//勇者オブジェクトのインスタンスのnameプロパティに代入
//勇者オブジェクトのインスタンスのjikoshokaiメソッドに上で
//作った関数オブジェクトを代入
var braveman1=new Object();
braveman1.name=” 勇者no1 “;
braveman1.jikoshokai=jikoshokai;
//勇者インスタンスのjikoshokaiメソッドを呼び出し。
//この中のthisは勇者インスタンスbraveman1を指す。
braveman1.jikoshokai();
オブジェクトのメソッドが呼び出されたときに、thisはそのオブジェクト自体を表す。
2.コンストラクタの中のthis
参照(https://www.sejuku.net/blog/25328)
ソース例
//コンストラクタPersonを定義↓
3.prototypeでメソッドを結びつける(prototypeの使い方も含めて)。
参照(https://www.sejuku.net/blog/47722)
全てのオブジェクト(あらかじめ用意されている組み込みオブジェクトも、自分で作るオブジェクトも)はprototypeプロパティをもっている。
プロトタイプの一般的な記述方法は、
【 オブジェクト名.prototype.メソッド名= function() { } 】
具体例
//↓コンストラクタUserを定義
ソース例
var User = function(name, age) {
this.name = name;
this.age = age;
}
User.prototype.jikoshokai = function() {
console.log(“私の名前は”+this.name+”。年齢は”+this.age+”です。”);
}
var usert=new User(“D_trunp”,60);
usert.jikoshokai();
var usero=new User(“obama”,53);
usero.jikoshokai();
結果
私の名前はD_trunp。年齢は60です。
私の名前はobama。年齢は53です。
prototypeに結びつけたメソッド(jikoshokai)内のthisは、メソッドjikoshokaiを呼び出したインスタンス(usertとusero)を指す。その結果トランプとオバマが自己紹介している。
とりあえずこれがオブジェクト指向の基本。
- コンストラクタ定義(引数でプロパティを初期化)
- prototypeにメソッドを結びつける。メソッドの中のthisは、その後newで作られるインスタンスがメソッドを呼び出した時、そのインスタンスを指す。
- newでインスタンス作成。
- インスタンスがメソッドを呼び出し。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
コールバック関数とその中のthisが問題となる。なので↑のようにthisを指定する機能がある、と。指定しないとundefined。これもjavascriptの言語仕様。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/this
mdnのthisの解説。これを抑えておく。