行うために:大学だけでフロントエンドを学び始め、姉と私は言った、あなたはすべてのルールを覚えておく必要はありませんが、問題が発生した場合に利用可能なルールを知る必要があります。実際、曖昧戻ることがたくさんのより多くの感情は、ちょうど子供のように、バックワードのように、バック何度も何度も忘れます。
たくさんのロングったらしい、バー(PS:なし基本的な概念の文の全体、物事でちょうど私の個人的な記録のいくつかのより多くの興味)を取得
まず、基本的なマップのためにしてみましょう:
この_proto_に興味が起動し、プリミティブ型と参照型は、次のような属性があり_proto_:
基本タイプについて
文字列: VAR A = '試験' a._proto_ === String.prototype 数: するvar = 1 B b._proto_ === Number.prototypeを
ブール:
trueにするvar C =
c._proto_ === Boolean.prototype
未定義とnullが_proto_プロパティではありませんについては、ハハ、独自の試みを信じていない、私はまた、午前唯一見つけることではなく、どのようにする前に注意を払います
参照型について
オブジェクト: VaRのリンゴ= {} apple._proto_ === のObject.prototype アレイ: た ARR = {} arr._proto_ === Array.prototypeを 日付: VaRの日付= 新しい日付() date._proto_ === Date.prototype 正規表現: VaRの EXP = 新しい正規表現() exp._proto_ === RegExp.prototype
その後のinstanceofの理解の波(書かれた順序は、独自に応じて書き込むために要求され、この記事を見て助けることができない、私を許してください、私はポイントのレベルを向上させるために何かを書くことでしょう、私は再編集してきます)
instanceofを、そのオブジェクトの種類を検出するために使用されます
だから、検出するために、ルール内容に応じて原則であります
リンゴのViewオブジェクト[[プロトタイプ]]チェーンのコンストラクタプロパティがプロトタイプ場合。、真、またはコードが返された場合は、この文にそれを理解します
VaRのリンゴ= 新しいオブジェクト() apple._proto_のObject.prototype ===
上記の両側に等しい値:
したがって(オブジェクトのinstanceofリンゴ)//真CONSOLE.LOG
:アンコール
VAR =新しい新しいリストアレイ()
list._proto_ === String.prototype
ようにconsole.logを(文字列のinstanceofリスト)//真
とString.prototype._proto_ ===のObject.prototype
_._ proto_ ===のObject.prototype list._proto
真//これはconsole.log(オブジェクトのinstanceofリスト)
、ダウン両方のケース私たちはバーが見つけるためにプロトタイプチェーンの値をダウンしている法律があるべきであると感じ
一般的なルールを書いた後、それは大きな団結次のようになります。
基本タイプについて
文字列:
VAR A =」1' はconsole.log(のinstanceof String)を // falseに
番号: VARの B = 1。 はconsole.log(B instanceofはナンバー) // falseに
ブール: VARの C = trueに (Cにconsole.log instanceofはブール) //偽
未定義のヌルと2つのデータ型、instanceofは何が検出できない
(trueにすべての)私が開始され、その後、あまりにも最初の3つのコンソールを印刷:
a._proto_ === String.prototype
b._proto_ ===ナンバー。プロトタイプ
c._proto_は=== Boolean.prototypeの
疑問は、なぜinstanceofは偽として検出され、そして私の現在の理解は、ブラウザが自動的に変換ということですので、式はinstanceofのは、基本データ型を検出しなかったとする、保持しています理由はどのような意味。
参照型について
オブジェクト: するvar A = 新しいオブジェクト() a._proto_ === のObject.prototype console.log(のinstanceof Object)を // 真 アレイ(日付、配列と正規表現のルール): VaRの B = 新しいアレイ() b._proto_ === Array.prototypeを (Bにconsole.log のinstanceofアレイ) // 真 b._proto _._ proto_ === のObject.prototype console.log(B のinstanceof Object)を // 真
ネイティブコンストラクタの概要
オブジェクト: Object._proto_ === Function.prototype console.log(オブジェクトのinstanceof機能) // 真 Object._proto _._ proto_ === のObject.prototype console.log(オブジェクトのinstanceof Object)を // 真
機能:
Function._proto_ === Function.prototype
はconsole.log(機能のinstanceof機能)//真
Function._proto _._ proto_ ===のObject.prototype
はconsole.log(ファンクションのinstanceofオブジェクト)//真 文字列: String._proto_ === Function.prototype console.log(文字列のinstanceof機能) // 真 String._proto _._ proto_ === のObject.prototype console.log(文字列のinstanceof Object)を // trueに
他のネイティブコンストラクタ同上文字列
カスタムコンストラクタ
関数FN(){}。 ここ = 新しいFN()。 a._proto_ === Fn.prototype console.log(instanceofは FN) // 真 a._proto._proto_ === のObject.prototype console.log(のinstanceof Object)を // 真