__proto__ とconstructor.prototype の違いは何ですか? 質問する

__proto__ とconstructor.prototype の違いは何ですか? 質問する
function Gadget(name, color)
{
   this.name = name;
   this.color = color;
}

Gadget.prototype.rating = 3

var newtoy = new Gadget("webcam", "black")

newtoy.constructor.prototype.constructor.prototype.constructor.prototype 

常に評価 = 3 のオブジェクトを返します。

しかし、次のことを行うと:

newtoy.__proto__.__proto__.__proto__

チェーンは結局戻ってきますnull

また、Internet Explorer では、プロパティがない場合に null をどのようにチェックするのでしょうか__proto__?

ベストアンサー1

最近、この問題について考えてみたのですが、ついにこの「地図」が思い浮かびました。これでこの問題が完全に明らかになると思います。

https://i.sstatic.net/KFzI3.png ここに画像の説明を入力してください

私がこれを最初に思いついたわけではないことはわかっていますが、見つけるよりも理解する方が面白かったです :-)。とにかく、その後、基本的に同じことを言っていると思われる別の図を見つけました。

Javascript オブジェクトレイアウト

私にとって最も驚いたのは、 が ではなくObject.__proto__を指していることを発見したことです。しかし、それにはきっと何か理由があるのでしょう :-)Function.prototypeObject.prototype

誰かがテストしたい場合に備えて、画像に記載されているコードもここに貼り付けます。ジャンプ後にどこにいるかを簡単に把握できるように、オブジェクトにいくつかのプロパティが追加されていることに注意してください。

Object.O1='';
Object.prototype.Op1='';

Function.F1 = '';
Function.prototype.Fp1 = '';

Cat = function(){};
Cat.C1 = '';
Cat.prototype.Cp1 = '';

mycat = new Cat();
o = {};

// EDITED: using console.dir now instead of console.log
console.dir(mycat);
console.dir(o);

おすすめ記事