<!DOCTYPE HTML> <HTML> <HEAD> <METAのcharset = "UTF-8"> <タイトル> </ TITLE> </ HEAD> <BODY> </ BODY> <スクリプトタイプ= "テキスト/ JavaScriptを"> セクション 図1は、一般的な目的関数と関数は、オブジェクトオブジェクト 、VAR OBJ = {} VAR OBJ =新しい新しいオブジェクトを(); obj.constructor ===オブジェクト OBJ .__ proto__ ===のObject.prototypeインスタンスコンストラクタ等しい__proto__ Object.prototypeプロトタイプオブジェクト 2は、コンストラクタ //各オブジェクトはコンストラクタ特性を有し、それはコンストラクタを得ることができます。 //コンストラクタコンストラクタ コンストラクタ//インスタンス属性(コンストラクタ)コンストラクタを指しています。* 3、プロトタイプオブジェクトは //各オブジェクトは、__proto__プロパティを持っているが、唯一の関数オブジェクトのprototypeプロパティを持つ 名前が示すように//プロトタイプオブジェクト、それは通常の対象者です。 //デフォルトでは、すべてのオブジェクトが自動的に機能するプロトタイプのコンストラクタ(コンストラクタ)の特性、(ポインタ)を取得します(人)prototypeプロパティが配置されている 。結論:プロトタイプオブジェクト(Person.prototypeは)コンストラクタですインスタンスの(人)。 第二 4、__ proto__ JSオブジェクトを作成するときに(通常のオブジェクトや関数オブジェクトかどうか)、があり、内蔵のプロトタイプオブジェクトのコンストラクタを作成するために、ポイントの__proto__名前付きプロパティ。 人== Person.prototype.constructor; PERSON1 .__ proto__ == Person.prototype; ; person1.constructor ==人 。コンストラクタ5は、 :おなじみのJavascriptの靴が知っている、我々は、オブジェクトを作成でき VAR OBJ = {} と等価です例えば、以下: VAR OBJ =新しい新しいオブジェクト() objがインスタンスコンストラクタ(オブジェクト)です。だから、: obj.constructor ===オブジェクト OBJ .__ ===のObject.prototype proto__ 同様に、あなたがオブジェクトを持たないオブジェクトのコンストラクタを作成することができ、また、アレイ、日付、関数、文字列、可能ブール、数値、 そうでと。だから我々はまた、配列、日付、関数を作成するためにコンストラクタができ、これらは、コンストラクタ関数オブジェクトです 6.プロトタイプチェーン ; ===ヌルのObject.prototype .__ proto__ パートIII 7.関数オブジェクト //プロトは、すべての関数オブジェクトです関数エンプティ(空の関数)である点Function.prototype、 //コンストラクタは、すべての偶数ルート自体コンストラクタオブジェクトおよび機能を含む、Function.prototypeから誘導される 数.__ proto__真の// === Function.prototype 数。 ==真//コンストラクタ関数 // trueにブール.__ proto__ === Function.prototype // trueにBoolean.constructor ==関数 //コンストラクタは、すべての偶数ルート自体Constructorオブジェクトや関数を含む、Function.prototypeから導出されています === trueにFunction.prototype proto__ .__ //オブジェクト 真//にObject.constructor ==機能 でも、ルートオブジェクトのコンストラクタ自体と機能を含むすべてのFunction.prototypeから来//コンストラクタ、 真の機能.__ proto__ === Function.prototype // 真//にFunction.constructor ==機能 アレイ.__ ===機能proto__真の// .prototype Array.constructor真//関数へ== 真//の日.__ proto__ === Function.prototype Date.constructor真//関数==に //関数宣言 機能人(){} //関数式 Perosn関数= VAR(){} はconsole.logは(人をproto__ .__ === Function.prototype)//真の すべてのコンストラクタをもルートと機能オブジェクトビルダ自体を含む、Function.prototypeから誘導される**。すべてのコンストラクタは···のFunction.prototypeをプロパティとメソッドを継承します。長さは、コールは、**結合し、適用されます // Function.prototypeプロトタイプの機能のためだけのtypeofのXXX.prototype。他のプロトタイプコンストラクタは、対象となる 機能//(Function.prototype typeof演算)はconsole.log はconsole.log(typeof演算のObject.prototypeの)オブジェクト// はconsole.log(typeof演算Number.prototypeをする)オブジェクト// はconsole.logを( Boolean.prototype typeof演算)オブジェクト// はconsole.log(typeof演算String.prototype)オブジェクト// はconsole.log(typeof演算Array.prototypeを)オブジェクト// はconsole.log(typeof演算RegExp.prototype)オブジェクト// はconsole.log(typeof演算エラー.prototype)オブジェクト// はconsole.log(typeof演算Date.prototype)オブジェクト// はconsole.log(typeof演算のObject.prototype)//オブジェクト ビルトインとカスタムを持つすべてのコンストラクタ__proto__は()関数である知っていました。プロトタイプ、それは__proto__のFunction.prototypeということでしょうか? 私はすべてのJavaScript関数は、第一級市民で聞いて、その後、どのようにそれから反映させることができると信じて?console.log(Function.prototype .__ proto__ ===のObject.prototype)として // trueの場合、 すべてのコンストラクタは、コンストラクタにも共通JSオブジェクトであることを示すことは、属性を削除/追加することができます。それはまたのObject.prototype上のすべてのメソッドを継承しますなどのtoString、のvalueOf、hasOwnPropertyを プロトの最後のObject.prototypeが誰ですか?Object.prototype .__ proto__は=== nullがピークに達し、かつnullでいます。(戻って第五章を見て、今読んで、それを理解することができますか?) 8を、プロトタイプ のすべての機能はプロトポイントFunction.prototypeオブジェクト、それが空の関数(空の関数)である ので、すべてのObject.getOwnPropertyNames(Function.prototype)関数オブジェクトを使用することができ 見直し、9を 我々は要約第八章:__proto__すべての関数オブジェクトポイントFunction.prototypeを、それが空の機能(空の関数)です が、あなたは私たちがまとめた3番目のセクションを忘れることができませんの:すべてのオブジェクトは、そのコンストラクタのプロトタイプを指す__proto__ (リフレッシャーで)10、プロトタイプチェーン 人(){}関数 VAR =新しい新しいPERSON1人を(); console.log(PERSON1 .__ proto__ === Person.prototype)。//真 1、オブジェクト.__ proto__ === Function.prototype //真 真//にはconsole.log(Person.prototype .__ proto__ ===のObject.prototype) はconsole.log(のObject.prototype .__ proto__)// nullの 人.__ proto__ == Function.prototype; // trueに はconsole.log(機能。プロトタイプ)//関数(){} (空の関数) 新しいNUM新しいVARは、Array()= // trueにはconsole.log(NUM .__ proto__ == Array.prototypeを)を (にconsole.log Array.prototypeを.__ proto__ ==のObject.prototype )// trueに はconsole.log(Array.prototypeを)// [](空の配列) はconsole.log(のObject.prototype .__ proto__)//ヌル にconsole.logは(アレイは真//へFunction.prototype ==)proto__ .__ 疑いをFAQ: オブジェクトが作成する)(新しい機能により、オブジェクトの関数であるので、オブジェクト.__ proto__点Function.prototype。(セクションVIIIを参照してください:「すべての__proto__関数オブジェクトポイントFunction.prototypeを」) 2、機能.__ proto__ === Function.prototype //関数)(また、新しい機能により作成され、また、真の関数にオブジェクトなので、機能.__ proto__ポイントFunction.prototype。 3、Function.prototype .__ proto__ ===のObject.prototype //真の 私は少し混乱していますが、あなたが説明しようとすることができるという事実。 Function.prototypeがオブジェクトの関数であり、理論的には、彼は__proto__ Function.prototypeを指している必要があり、それは自分自身を所有するために指して、彼自身で、意味がありません。 JSは、常にすべてのものがオブジェクトであることを強調した、関数オブジェクトがオブジェクトである、彼は、あなたが父親だったポイントのObject.prototypeを認める与えます。Object.prototype .__ proto__ === nullで、プロトタイプチェーンは、通常の終了を保証することができます。 合計11、 プロトタイプチェーンは、モデルとプロトタイプJS実装の継承です。 フォームプロトタイプチェーンが実際に試作品によって__proto__れない VAR動物=関数(){}; VAR犬=関数(){}; animal.price = 2000; 動物= Dog.prototype; VAR =整頓新しい新しい犬(); にconsole.log(dog.price)//未定義 にconsole.log(tidy.price)// 2000 犬の関数= VAR(){}; dog.prototype.price = 2000; VAR =整頓新しい新しい犬(); にconsole.log(tidy.price); // 2000 にconsole.log(dog.price); //未定義 VAR =関数犬(){}; VAR =整頓新しい新しい犬(); tidy.price = 2000; にconsole.log(dog.price); //未定義の 例(整頓)とプロトタイプオブジェクト(Dog.prototype)接続が存在します。しかし、本当に重要なポイントをクリアするためには、この接続はプロトタイプオブジェクトのインスタンス(整頓)とコンストラクタ(dog.prototype)との間に、存在することがある のではなくインスタンス(整頓)とコンストラクタ(犬)の間。 コメント: 1、ほとんどのブロガーはそれを分析し、プロトタイプチェーンは、コメントの誤解につながる、明確ではないが、プロパティのインスタンス、jsはプロトタイプオブジェクトへ下る、プロトタイプオブジェクトではなく、プロトタイプオブジェクトを見つけようとしません__proto __(のObject.prototype)に見て、 最終的にはundefinedを返します見つけることができませんでした、対応する値が返されます見つける、(彼はプロトタイプチェーンの最後のヌルである)Object.prototype._proto_を見つける のすぐ隣、突然、プロトタイプオブジェクトは、あるに私の同僚に耳を傾け、2を自分のプロトタイプオブジェクトを作成し、それがレベルとして理解することができます。 注 :</ SCRIPT> </ HTML>