プロトタイプについて
プロトタイプチェーンはどういう機能か
- オブジェクトには必ず内部的にプロトタイププロパティを持っている
- プロトタイププロパティの中にさらにプロトタイププロパティがネストされている
- プロパティにアクセスした時にプロトタイププロパティの中を捜索する
const obj = {
a: 1,
b: 2,
};
console.log(obj); // ここにプロトタイププロパティが存在する
__ proto __ とは?
- プロトタイププロパティが持つgetterとsetterのプロパティ名である
- console.log()で出てくる__proto__はプロトタイププロパティそのものではない
プロトタイププロパティの確認方法
getter(非推奨)
console.log(obj.__proto__);
Object.getPrototypeOf
console.log(Object.getPrototypeOf(obj));
プロトタイププロパティの設定方法
setter(非推奨)
obj.__proto__ = {c:3};
Object.setPrototypeOf
Object.setPrototypeOf(obj, {c:3});
プロトタイプの設定とオブジェクトの設定を同時に行う
Object.create
const obj = Object.create({c:3});
obj.a = 1;
obj.b = 2;
setPrototypeOfとcreateはどちらを使う?
結論
createを使う⇒処理速度が全然違う
ただしそもそもプロトタイプを書き換える処理は避けよう
for-inとObject.keysの違い
プロトタイプまでループするかどうか
const obj = Object.create({c:3});
obj.a = 1;
obj.b = 2;
for(const key in obj){
console.log(key); // a b c
}
console.log(Object.keys(obj)); // [a, b]
通常はプロトタイプまでループして欲しくないのでfor-ofを使うと良い
for(const key of Object.keys(obj)){
console.log(key); // a b
}