1. 本来の値と参考値
元の値はスタックに格納され、参照値はヒープに格納されます。次のようなプログラムです。
次のようにコードをコピーします。
関数 人(id,名前,年齢){
this.id = ID;
this.name = 名前;
this.age = 年齢;
}
varnum = 10;
var bol = true;
var str = "abc";
var obj = 新しいオブジェクト();
var arr = ['a','b','c'];
var person = new person(100,「馬鹿の座右の銘」,25);
2.未定義およびnull
未定義: 変数は未定義です。これは、未定義型の排他的な値です。
null: 参照は割り当てられておらず、Null 型の排他的な値です。
typeof(未定義) == 未定義;
typeof(null) == オブジェクト;
未定義==null;
未定義!==null;
オブジェクトの null インスタンス == false;
未定義のオブジェクトのインスタンス == false;
未定義型と Null 型がありますが、次の例は、これら 2 つの型が非表示であることを示しています。つまり、それらの値のみを使用できます。
アラート(未定義の未定義インスタンス);
アラート(Null の null インスタンス);
3. 擬似配列
特徴:
1) 長さ属性を持つ。
2) 配列のようにインデックス順にデータにアクセスします。
3) プッシュ、ポップ、スライスなどの配列固有のデータ操作メソッドはありません。
疑似配列は、Array.prototype.slice を通じて実際の配列に変換できます。
var faceArray = {0: 'a', 1: 'b', length: 2}//標準の疑似配列;
var realArray = Array.prototype.slice.call(fakeArray);
js の疑似配列: argument、node.childNodes、document.getElementsByTagName()...
IE の問題: IE では、node.childNodes をスライスで変換できません。
Jquery の擬似配列: Jquery 自体は擬似配列です。
アラート($('.class1').length); アラート($('.class1').[0].tagName);
4. 単純型リテラルについて
var a = 1; b = true、c = "ccc";
リテラルには型があるようです
alert(typeof a);//数値
alert(typeof b);//ブール値
alert(typeof c);//文字列
ただし、instanceof では測定できません。
alert(数値のインスタンス)//false
アラート(オブジェクトのインスタンス)//false
alert(b Boolean のインスタンス)//false
アラート(オブジェクトのインスタンス)//false
alert(c 文字列のインスタンス)//false
alert(c オブジェクトのインスタンス)//false
5. 関数のプロトタイプ属性とオブジェクトインスタンスの内部プロトタイプ属性
各関数 (コンストラクター) にはプロトタイプ属性があり、各オブジェクト インスタンスには、コンストラクターのプロトタイプ属性を指す、非表示の (mozilla が公開し、__proto__ を通じて取得できる) 内部プロトタイプ属性があります。プロトタイプ チェーンを形成する独自のプロトタイプ プロパティ。Object は最上位オブジェクトであるため、オブジェクト インスタンスのプロパティ/メソッドにアクセスするとき、すべてのプロトタイプ チェーンは最終的に Object.prototype を指します。オブジェクト インスタンス自体から検索を開始します。見つからない場合は、Object.prototype.prototype == null までプロトタイプ チェーンに沿って上方向に検索します。
6. コンストラクターのちょっとした秘密
次のようにコードをコピーします。
var s = new function(){return "sss"};
アラート;//[オブジェクト オブジェクト]
s = new function(){return new String("sss")};
アラート;//sss
このコードの説明:
new 式の後のコンストラクターが参照オブジェクト (配列、オブジェクト、関数など) を返す限り、プリミティブ型を返す場合は、new によって作成された匿名オブジェクトが上書きされます (戻り値がない場合は、実際に戻り値が返されます)。プリミティブ型 unknown ) の場合、 new によって作成された匿名オブジェクトが返されます。
7. オブジェクト作成のプロセス
次のようにコードをコピーします。
関数 人(名前){
this.name = 名前;
}
人物.プロトタイプ = {
getName: function(){この名前を返す}
};
var p = 新しい人('zhangsan');
p の作成プロセスを復号化します。
◦ 組み込みオブジェクト obj を作成し、初期化します。
◦ p の内部 [[Prototype]] を Person.prototype にポイントします。
◦ p をこのように使用し、arguments パラメータを使用して Person の内部 [[Call]] メソッドを呼び出します。つまり、 Person 関数本体を実行して戻り値が返されない場合は、unknown が返されます。
前のステップでオブジェクトタイプが返された場合は、この値を p に返し、それ以外の場合は obj を返します。
8. オブジェクト自身のプロパティと継承されたプロパティ
次のようにコードをコピーします。
関数 人(名前){
this.name = 名前;
}
人物.プロトタイプ = {
タイプ: '人間'、
getName: function(){この名前を返す}
};
var p = 新しい人('zhangsan');
alert(p.hasOwnProperty('type'));//false
p.type = 'レン';
alert(p.hasOwnProperty('type'));//true
実行結果は非常に明らかです。オブジェクトのプロパティはプロトタイプ内の同じ名前のプロパティを変更できませんが、同じ名前のプロパティを作成してそれに値を割り当てるだけです。
9.関数オブジェクトの作成手順
組み込みオブジェクト object fn を作成します。
fn の内部 [[Prototype]] を Function.prototype に設定します。
内部 [[Call]] 属性を設定します。これは、関数呼び出しのロジックを処理する内部実装メソッドです。 (単に関数本体を指すものとして理解されます);
fn.length を funArgs.length に設定します。関数にパラメータがない場合は、fn.length を 0 に設定します。
fn.prototype のコンストラクターは fn 自体を指します。
fnを返します。
10.instanceofの原則
a が B のインスタンスであるかどうかを確認するには、B のプロトタイプ (コンストラクターの prototype 属性) が指すオブジェクトが a のプロトタイプ チェーン上にあるかどうかを確認する必要があります。
11. 機能とオブジェクトについての推測
alert(関数インスタンスオブ関数);//true
alert(オブジェクトの関数インスタンス);//true
alert(関数のオブジェクトインスタンス);//true
alert(オブジェクトのインスタンスのオブジェクト);//true
ずっと考えているのですが、分かりません…。