ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript プロトタイプ チェーンとprototype_javascript スキルに関する誤解

Javascript プロトタイプ チェーンとprototype_javascript スキルに関する誤解

WBOY
リリース: 2016-05-16 16:33:04
オリジナル
1448 人が閲覧しました

以前、私は Javascript のプロトタイプ チェーンにおけるプロトタイプの継承と識別子の検索について少し混乱していました。

たとえば、次のコード:

コードをコピーします コードは次のとおりです:

function Foo() {};
var foo = new Foo();
Foo.prototype.label = "ラルエンス";
アラート(foo.label); //出力: ラルエンス
alert(Foo.label);//出力: 未定義

今日、次の写真を見ました:

JavaScript オブジェクトのレイアウト
また、JavaScript オブジェクト階層:

も参照してください。

プロトタイプは、その関数によって作成されたオブジェクト/インスタンスによって継承されるプロパティにのみ使用されます。関数自体は、関連付けられたプロトタイプを使用しません。

言い換えると、関数オブジェクトのプロトタイプは、プロトタイプチェーンの検索プロセスに影響を与えません。

今日、Firefox で発見しました (Firefox が __proto__ を通じて [[prototype]] を公開したため)、実際に識別子検索に参加しているのは関数オブジェクトの __proto__ です

コードをコピーします コードは次のとおりです:

function Foo() {};
var foo = new Foo();
Foo.__proto__.label = "ラルエンス";
alert(Foo.label); //出力: ラルエンス
alert(foo.label);//出力: 未定義

そして明らかに:

コードをコピーします コードは次のとおりです:

function Foo() {};
alert(Foo.__proto__ === Foo.prototype) //出力: false

さらに、次のようにも説明されています

コードをコピーします コードは次のとおりです:

alert(Object.forEach); // 未定義

Function.prototype.forEach = function(オブジェクト、ブロック、コンテキスト) {
for (オブジェクト内の var キー) {
If (typeof this.prototype[key] == "未定義") {
block.call(context, object[key], key, object);
}
}

};

alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach === Function.forEach) // true
;
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート