ホームページ > ウェブフロントエンド > jsチュートリアル > 関数 foo_javascript のプロトタイプおよびプロトタイプ属性に関する質問 スキル

関数 foo_javascript のプロトタイプおよびプロトタイプ属性に関する質問 スキル

WBOY
リリース: 2016-05-16 18:15:56
オリジナル
1065 人が閲覧しました

混乱の原因は次のとおりです。

コードをコピー コードは次のとおりです。

function foo {
this. name = 'foo';
}
alert(foo.prototype === Function.prototype ); 当時は、なぜ foo のプロトタイプが Function.prototype ではなかったのか理解できませんでした。


次の例では、o.prototype === Function.prototype が true であることが当然だと考えています。
コードをコピーします。 コードは次のとおりです。

function foo() {
this.name = 'foo'>}
Function .prototype.sayHello = function (parent) {
alert('hello');
foo.sayHello(); // アラート 'hello'


Function.prototype がsayHello メソッドを追加した後に与えると、foo もプロトタイプから SayHello を取得します。デバッガーで観察し、情報 (ECMA-262 http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/ および「JavaScript の良い部分」第 5 章 5.1 疑似古典を含む) を確認したところ、foo.prototype の定義が見つかりました。
this.prototype = {constructor: this}; //ここでは foo.prototype = {constructor: foo};
ちなみに次のようなテストを行いました
alert(foo = == foo.prototype.constructor); //true

foo.prototype とは何ですか?これは新しいキーワードと密接に関係しています。 new foo() が何をするかについて話してください。
var obj = {}; //新しいオブジェクトを定義します
obj.[[prototype]] == this.prototype;
//注 1: これは foo、foo.prototype です。これは便利です。obj のプロトタイプに値を割り当てます。ここでは、[[prototype]] を使用してプロトタイプを表します
//注 2: obj にはプロトタイプ属性がないため、おそらく役に立ちません
var other = this.apply(obj, argument); // obj.name = 'foo' とする、つまり、obj は this として実行されます。 foo function
return (typeof other === 'object' && other) || that ; // foo 関数がオブジェクトを返す場合はオブジェクトを返し、それ以外の場合は obj を返します。

これにより、 new foo() の場合、 foo がオブジェクトを作成してそのコンストラクターとして機能し、 foo.prototype が新しいオブジェクトのプロトタイプとして使用されることが非常に明確になります。
foo.prototype は、Function.prototype を変更することを恐れることなく、任意のメソッドを追加したり、任意のオブジェクトに変更したりできます (Function.prototype はすべての関数のプロトタイプです);
this.prototype = {constructor: this}; foo.prototype を手動で指定しなくても、js は new によって作成された新しいオブジェクトのデフォルトのプロトタイプを指定します。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート