javascript object array方法は詳しく説明します.

2093 ワード

Aray.prototype.push
pushは配列の最後にアイテムを追加し、lengthを更新して、配列長を返します.
もしObjectがPushを使ったらどうなりますか?
下のコードを見ると、Objは配列のように働きます.lengthは自動的に更新されます.
 
  
var push = Array.prototype.push;
var obj = {};
push.call(obj, "hello"); // 1
// obj {"0":"hello", length:0}
push.call(obj, "world"); // 2
// obj {"0":"hello", "1":"world",length:2}
Aray.prototype.length Aray.prototype.splice
lengthとspliceをObjectにあげます.
次のコードを見てください.objという商品は配列になっていますか?実はこれはデバッグツールの出力検査の問題かもしれません.
私たちはinstance ofでobj instance of Aray/falseをテストします.
var obj={length:0,splice:Aray.prototype.splice}consolone.log(obj)//印刷:[]
次のコードを参照してください:
obj.push(0)//obj.lengthに戻る
1 obj.push(1)//obj.lengthに戻る
2 obj.splice(0,1)//最初の項目を削除して削除項目に戻ります.
[0]obj.length//1 splice削除時もlength属性を更新します.
このようにobjの表現はほとんどarrayと同じです.意外なslice、pop、shift、unshiftなどを出さないで正常にobjectの中で働くことができます.
ただし、直接にlengthを設定すると、配列内でlengthより大きい下表の項目が削除されますが、ここのObjは更新されません.
応用はどこですか
jQueryの相手はarrayのように見えますが、彼は相手です.このような相手はどうやってnewできますか?
実際にjQueryはObjectにArayの方法を貸して、このjQueryの対象の効果を達成して、jQuery対象の内部も直接pushなどのArayの方法を使います.
jQueryの一部のソースコードを見てください.
 
  
// Start with an empty selector
selector: "",
// The current version of jQuery being used
jquery: "1.7.1",
// The default length of a jQuery object is 0
length: 0,
......
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort,
splice: [].splice
ObjectをArayにすると、潜在的な問題length属性は行列項目の合計に対応しません.
したがって、length設定をそのまま使用すると、長さがサポートされません.
下のjqueryコードを見てください.lengthが更新されましたが、jqueryの対象は更新されていません.(もちろんこれはjqueryの問題ではない)
私たちはページで40個を取得したと仮定します.
divjq.length/40
jq.length=0jq//jqにはまだ40個のdomオブジェクトlength属性が格納されていますが、配列項目の総和には対応しません.
Objectはarrayの方法を使って正常に仕事ができます.本当に思いがけないです.実際に使うのはこれらだけではないかもしれません.