2016-12-01 5 views
1

私はprototype chainをJavascriptで勉強してきましたが、この件は私には不思議に思っています...プロトタイプチェーンの終わりにあるオブジェクトを参照する共通の名前または用語がありますか?Object .__ proto __.__ proto__オブジェクトの一般的な用語/名前はJavascriptにありますか?

私はGitHub repo of mineにマークダウンファイルを書いています。私はそれを「神」オブジェクトと呼んでいます。しかし、私はこのオブジェクトがどのように振る舞うかについてはかなり確信しています。

たとえば、ある特定のタイプのオブジェクト(「Dog」オブジェクト)に独自の「God」を持つように参照を変更することはできますか、この1つの「God」オブジェクトに拘束されますか?

+2

すべての他の人が来てそこから最終プロトタイプのObject.prototypeです。 Object.create(null)によってプロトタイプを持たないオブジェクトを理論的に作ることができます。これはObject.prototype以外の2番目のプロトタイプチェーンを形成するために使用できますが、そうしないでください。 – PMV

+0

ええ、まあ、私は実際のプロジェクトでそれをしません、私はちょうど全体としてJavascriptをよりよく理解するためにこの種のものを調べています。今私はあなたが言ったことが良い考えではないことを調査しなければなりません。ありがとう@PMV –

+1

多くのコードでは、オブジェクトにプロトタイプのプロパティ、特に.hasOwnProperty()または.toString()がある特定のメソッドを持っていると仮定し、Objectから継承しなかったオブジェクトを渡した場合.prototypeを使用すると、そうでない場合は堅牢なコードで例外が生成されます。 – PMV

答えて

2

あなたが参照している「神」オブジェクトはObject.prototypeです。

console.log({}.__proto__ === Object.prototype); 
 
console.log({}.__proto__.__proto__);

あなたがあなた自身の "神" オブジェクトを作成したい場合は、ルックアップテーブルを作成するときにそれが一般的に使用されてObject.create(null)

var obj = Object.create(null); 
 
console.log(obj.__proto__);

を使用し、プロトタイプのフィールドとの名前の競合を避けるためです。 toStringとなります。

function Map() { 
 
    var table = Object.create(null); 
 
    return { 
 
    put: function(key, val) { 
 
     table[key] = val; 
 
    }, 
 
    get: function(key) { 
 
     return table[key]; 
 
    } 
 
    }; 
 
} 
 
var map = new Map(); 
 
console.log(map.get('toString')); 
 
map.put('toString', 'test'); 
 
console.log(map.get('toString'));

+1

"ルックアップテーブルを作成するときによく使用されます" ---詳しく説明できますか? – zerkms

+2

@zerkmsどのようなことを詳しく説明するのか分かりませんが、私はあなたにこのような例を示すことができます(http://stackoverflow.com/a/38440069/5743988)。 – 4castle

+0

ねえ、私は今参照してください。あなたが答えでそれを説明した方法からそれを推測することはできません:-) – zerkms

関連する問題