1.my.toString() が呼び出されるとき、JavaScript エンジンの実行パスは何ですか?
认证0级讲师
リーリー
[1]。Triangle インスタンス オブジェクトを作成します。 リーリー
[3] Triangle インスタンス オブジェクト my でメソッド toString を呼び出し、現在のオブジェクトに存在しないことを確認します。TwoDShape インスタンス オブジェクトへのプロトタイプ チェーンをたどります。まだ存在しない場合は、Shape インスタンスに移動してオブジェクトを探します。 現時点での this オブジェクトは Triangle インスタンス オブジェクト my で、その name 属性値は Triangle で、出力は
1: まず、型とインスタンスの関係を理解してください。Shape は型 (抽象)、varshape = new Shap()、shape はインスタンスです。2: 質問が曖昧すぎます。と var sh = Shape() のコンストラクターの関係は何ですか => Shape のコンストラクターは Shape.prototype.constructor; (shape と sh はどのように関係するのでしょうか~)3: 直接継承しないのはなぜですか?このようにデザインされました;
すべて分解するとわかります。まず、new の動作ロジックを見てください。TwoDShape.prototype = new Shape(); 3 つのことを実行します。 リーリー
TwoDShape.prototype = new Shape();
リーリー リーリー
my.toString()的时候从my自身成员开始找toString,没有就沿着__proto__往上找,最终在my.__proto__.__proto__(也就是TwoDShape.prototype)里找到了toString
my.toString()
my
toString
__proto__
my.__proto__.__proto__
TwoDShape.prototype
リーリー
[1]。Triangle インスタンス オブジェクトを作成します。 リーリー
[2] Triangle インスタンス オブジェクト my でメソッド getArea を呼び出します。[3] Triangle インスタンス オブジェクト my でメソッド toString を呼び出し、現在のオブジェクトに存在しないことを確認します。TwoDShape インスタンス オブジェクトへのプロトタイプ チェーンをたどります。まだ存在しない場合は、Shape インスタンスに移動してオブジェクトを探します。
現時点での this オブジェクトは Triangle インスタンス オブジェクト my で、その name 属性値は Triangle で、出力は
1: まず、型とインスタンスの関係を理解してください。Shape は型 (抽象)、varshape = new Shap()、shape はインスタンスです。
2: 質問が曖昧すぎます。と var sh = Shape() のコンストラクターの関係は何ですか => Shape のコンストラクターは Shape.prototype.constructor; (shape と sh はどのように関係するのでしょうか~)
3: 直接継承しないのはなぜですか?このようにデザインされました;
すべて分解するとわかります。まず、new の動作ロジックを見てください。
同じ理由TwoDShape.prototype = new Shape();
3 つのことを実行します。 リーリーリーリー リーリー
実行時my.toString()
的时候从my
自身成员开始找toString
,没有就沿着__proto__
往上找,最终在my.__proto__.__proto__
(也就是TwoDShape.prototype
)里找到了toString