1

b.prototype.prototype が定義されていない ("Object {}" ではない) 理由を説明してください。

a = function(){}
function b(){}

console.log(a.prototype)                        //Object {} 
console.log(b.prototype)                        //b {}
console.log(a.prototype.prototype)              //undefined 
console.log(b.prototype.prototype)              //undefined

a > Object{} > 未定義 - OK

b > b{} > ???

4

3 に答える 3

1

主に、 のプロトタイプが再び存在bするように見えるという事実に混乱しているようですが、そうではありません。bどちらのプロトタイプもオブジェクトであるため、独自のプロトタイプはありません。構築されたプロトタイプの "toString()" メソッド (または使用している特定のコンソールがこのオブジェクトを表示するために利用するもの) の実装は、実装固有のものであり、この場合、関数名 (存在する場合) が含まれます。出力で。別のブラウザー (IE など) では別の出力が得られる場合があります。

于 2013-03-16T07:58:09.633 に答える
0

プロパティに何も割り当てておらず、prototype作成もしていないため、未定義です。

a.prototype.prototype=a.prototype;
console.log(a.prototype.prototype)//{}
于 2013-03-16T07:40:45.347 に答える
0

なぜb.prototype.prototype定義されるのでしょうか?

var a = function () {};

a.prototype; // {}

function b () {}

b.prototype; // {}

どちらのプロトタイプにもプロトタイプと呼ばれるプロパティはありません...
そのため、オブジェクトの存在しないプロパティを要求すると、undefined.

コンソールが呼び出しているという事実は、b.prototype "b{}"何も変更しません。bに割り当てられたような無名関数ではなく、named-funciton のプロトタイプ オブジェクトであると言っているだけaです。

プロトタイプのない、まだ空のオブジェクトです。

于 2013-03-16T07:42:45.680 に答える