B は関数であり、その name="B"、B.callname メソッドが呼び出され、呼び出し元が B である場合、callname メソッド内のこれは B を参照します。B.name が何であるかを覚えていますか? 上の最初の例を見て理解してください。
リーリー
なぜ「this is B」が B.prototype.name で定義されていないのかと疑問に思うでしょう。 B のプロトタイプで定義されたプロパティには、B のインスタンスからのみ直接アクセスできるためです。 それでも信じられない場合は、xname などの名前をすべて変更してください。そうすれば、この質問に対する答えは未定義になります
a.callname() 何を出力しますか?
リーリー
a 自体は JSON で定義されたオブジェクト インスタンスです。 上記のコードは
と同等です
リーリー
callname の呼び出し元は a なので、callname 内のこれは a です
リーリー
(new B()).callname() 何を出力しますか?
リーリー
まず、最初に new B() が実行され、関数 B で一時的に b という名前を付けます。つまり、b = new B() となります。このときのをbとすると、B関数本体のメソッドalertが順次実行されます。 b.nameとは何ですか? b はインスタンスであり、name 属性を持たないため、親クラスのプロトタイプ定義で name を検索し、「this is B」を見つけます。new B()先执行, 创建了一个匿名实例,我们暂且给他命名为b, 即 b = new B(), 函数B中的this此时被指代为 b, 然后才是依次执行B函数体内的方法alert, b.name是什么?b是个实例,它本身没有name属性, 就会去父类的prototype定义中找name,找到了 "this is B". 然后, b.callname() 次に、b.callname() が実行され、callname が定義されます。これはメソッド呼び出し元 b を参照します。インスタンス b 自体には name 属性がありません。親クラスでプロトタイプの name 属性値を見つけて返します。
最初のものでは、this is a がポップアップします。2 つ目のものでは、B は関数 B を表し、3 つ目のものでは、this is B が最初にポップアップします。インスタンス化するときに関数が実行されるためです。この場合、前のステートメント (new B()) にセミコロンがないため、構文エラーが発生します。構文エラーがない場合は、インスタンス オブジェクトがプロトタイプ オブジェクトの name 属性を呼び出すため、別の this is B がポップアップ表示されます。
質問に答える前に、例を見てみましょう
リーリー問題を 1 つずつ分析してみましょう (確認するには Chrome ブラウザの開発者ツールを使用してください)
B.callname() は何を出力しますか?
リーリーB は関数であり、その name="B"、B.callname メソッドが呼び出され、呼び出し元が B である場合、callname メソッド内のこれは B を参照します。B.name が何であるかを覚えていますか? 上の最初の例を見て理解してください。
リーリーなぜ「this is B」が B.prototype.name で定義されていないのかと疑問に思うでしょう。 B のプロトタイプで定義されたプロパティには、B のインスタンスからのみ直接アクセスできるためです。
それでも信じられない場合は、xname などの名前をすべて変更してください。そうすれば、この質問に対する答えは未定義になります
a.callname() 何を出力しますか?
リーリーa 自体は JSON で定義されたオブジェクト インスタンスです。 上記のコードは
と同等です リーリーcallname の呼び出し元は a なので、callname 内のこれは a です
リーリー(new B()).callname() 何を出力しますか?
リーリーまず、最初に
リーリーnew B()
が実行され、関数 B で一時的に b という名前を付けます。つまり、b = new B()
となります。このときのをbとすると、B関数本体のメソッドalertが順次実行されます。 b.nameとは何ですか? b はインスタンスであり、name 属性を持たないため、親クラスのプロトタイプ定義で name を検索し、「this is B」を見つけます。new B()
先执行, 创建了一个匿名实例,我们暂且给他命名为b, 即b = new B()
, 函数B中的this此时被指代为 b, 然后才是依次执行B函数体内的方法alert, b.name是什么?b是个实例,它本身没有name属性, 就会去父类的prototype定义中找name,找到了 "this is B".然后,
b.callname()
次に、b.callname()
が実行され、callname が定義されます。これはメソッド呼び出し元 b を参照します。インスタンス b 自体には name 属性がありません。親クラスでプロトタイプの name 属性値を見つけて返します。最初のものでは、this is a がポップアップします。2 つ目のものでは、B は関数 B を表し、3 つ目のものでは、this is B が最初にポップアップします。インスタンス化するときに関数が実行されるためです。この場合、前のステートメント (new B()) にセミコロンがないため、構文エラーが発生します。構文エラーがない場合は、インスタンス オブジェクトがプロトタイプ オブジェクトの name 属性を呼び出すため、別の this is B がポップアップ表示されます。