Javascriptのオブジェクトとプロトタイプ

Javascriptのオブジェクトはわかりづらいです。ほんと。普段あんまり書かないので。

Javascriptでオブジェクトを作成する

オブジェクトの表現が2つあって、どちらも同じものになります。

var obj = {name: "chinpo"};
console.log(obj);

var obj = new Object();
obj.name = "chinpo";
console.log(obj);

これどちらも同じ値をもっているんですが、このobjというインスタンスにある値(name: chinpo)は設定したからあるというのはいいんですがprotoという変なものがあるんです。コンソールログで見るとやたらといろんな値をもっているのがわかります。こいつがプロトタイプオブジェクトというものらしいです。

if (obj.__proto__ === Object.prototype) {
    console.log("true");
}

表現の仕方としては2つあって、obj.protoもObject.prototypeも全く同じものです。

console.log(obj.__proto__);
console.log(Object.prototype);

更にダンプしてみると、

constructor:ƒ Object()
hasOwnProperty:ƒ hasOwnProperty()
isPrototypeOf:ƒ isPrototypeOf()
propertyIsEnumerable:ƒ propertyIsEnumerable()
toLocaleString:ƒ toLocaleString()
toString:ƒ toString()
valueOf:ƒ valueOf()
__defineGetter__:ƒ __defineGetter__()
__defineSetter__:ƒ __defineSetter__()
__lookupGetter__:ƒ __lookupGetter__()
__lookupSetter__:ƒ __lookupSetter__()
get __proto__:ƒ __proto__()
set __proto__:ƒ __proto__()

ちなみにこの2つのオブジェクトはwindowに定義されているらしい。

window.obj.__proto__ === window.Object.prototype; // true

なるほどね。

https://qiita.com/howdy39/items/35729490b024ca295d6c

Last update: 2018.01.23 (火)