1. ホーム
  2. javascript

[解決済み] proto__とconstructor.prototypeはどのように違うのですか?

2022-04-22 03:12:48

質問

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__ プロパティを使用することはできますか?

どのように解決するのですか?

最近、この問題に頭を悩ませていたのですが、ようやくこの問題を完全に解明するための「quot;map"」を思いつきました。

http://i.stack.imgur.com/KFzI3.png

私はこれを作った最初の人ではないことを知っていますが、それを見つけるよりもそれを見つけ出す方が面白かったです :-)。とにかく、その後、例えばこのような図も見つけましたが、基本的には同じことを言っているように思います。

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

一番びっくりしたのは Object.__proto__ を指しています。 Function.prototype の代わりに Object.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);