このコードは、JS Elevation 3 の P598-599 の例です。
私が聞きたいのは、なぜアラートが未定義なのかということです。
曾经蜡笔没有小新2017-05-19 10:17:29
スタート
リーリーRectangle と入力します。これは新しいオブジェクトを指し、object1 と名付けます
に実行されました リーリーobject1の名前に「Polygon」と入力します
リーリーobject1 のプロトタイプは Rectangle なので、else に移動します
リーリーもう一度「Polygon」と入力します。これは新しいオブジェクトを指し、それを object2 と呼びます
object2 のプロトタイプは Polygon なので、object2 は sides
和 getArea
object1のテリトリーに戻り、Polygon.call(this,2);
object2に戻り、そして…そして捨てます。
次に object1 を与えます undefined
的 width
、height
和 getArea
。
ついに、rect が object1 を取得しました
ソリューションを追加して、Rectangle に Polygon のプロトタイプを共有させます
リーリー淡淡烟草味2017-05-19 10:17:29
Rectangle では、Polygon の this を Rectangle の this にポイントします。 Rectangle がコンストラクターとして使用される場合、this は Rectangle のインスタンス、つまりこの例では rect を参照します。Polygon のプロトタイプは、rect のプロトタイプ チェーン上にありません。つまり、この instanceof Polygon は false であるため、else で返された new Polygon(sides) が使用され、side はインスタンスにアタッチされないため、rect インスタンスには Side 属性は存在しません。
Rectangle(with,height)もありますが、幅が間違って書かれています
習慣沉默2017-05-19 10:17:29
あなたの例では、Polygon は干渉アイテムであり、Rectangle にはまったく影響しません。
削除してくださいPolygon.call(this,2);
もう一度見てください、理由がわかりますか
巴扎黑2017-05-19 10:17:29
これを印刷すると理由がわかります
this.sides=sides は Polygon に掛けられています
return new Polygon(sides);//これは呼び出されたときに Rectangle ではなくなります