0

次のコードでは、なぜObject.getPrototypeOf(person)機能するのだろうかと思いますが、機能しperson.getPrototypeOf(person)ませんか? オブジェクトにそのようなプロパティやメソッドがない場合、プロトタイプチェーンを上って取得しようとし、それを呼び出します(オブジェクトのコンテキストはどこにあるかthisなど)。その場合、なる必要がありますし、あまりにも動作する必要がありますか?Animal.getName.call(this)thiswoofieperson.getPrototypeOf(person)Object.getPrototypeOf.call(person, person)

function Person(name) {
    this.name = name;
}

var person = new Person("Ang Lee")

console.log("the prototype of person is", Object.getPrototypeOf(person));

更新:getPrototypeOf静的メソッドであるという回答については、次のことを意味しますか?

function Person(name) {
    this.name = name;
    this.foo = function() { ... }
}

Person.bar = function() { ... }

それfooは「チェーン内」であり、継承されたオブジェクトから呼び出すことができますが、そうではbarなく、静的メソッドはどれですか?bargetPrototypeOf

4

3 に答える 3

2

Object.getPrototypeOfObject 自体のプロパティであり、 of のプロパティではありませprototypeObject

実際にはプロトタイプ チェーンに含まれていないため、 を呼び出しても見つかりませんperson.getProtoTypeOf()

これは、他の OO 言語で見られる「静的メソッド」に似ています。

于 2012-09-30T13:56:42.503 に答える
1

.getPrototypeOfObjectは、プロトタイプではなく、 に配置される関数です。必要に応じて調べることができます:

"getPrototypeOf" in Object.prototype; // false
于 2012-09-30T13:59:21.687 に答える
1

getPrototypeOfメソッドが に含まれている場合Object.prototype、タイプ のオブジェクトでも使用できますがPersongetPrototypeOfは にアタッチされています。Objectこれはインスタンスのコンストラクタ関数にすぎObjectず、プロトタイプではありません。

何らかの理由で、Javascript の作成者は、プロトタイプはコンストラクター関数に関連付けられ、その逆ではないと判断しました。彼らがそのような疑わしい決定を下していなければ、この質問をする必要はなかったでしょう.

PS プロトタイプベースのオブジェクト継承のよりエレガントでクリーンな実装に興味がある人は、http://iolanguage.com/をチェックしてください。

于 2012-09-30T13:59:31.453 に答える