diyor sen underscore.js source bakarsanız, siz isArray
fonksiyon olarak tanımlanır göreceksiniz :
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) == '[object Array]';
};
brower doğal Array.isArray
o kadar örneği olmuştur budur çünkü bir dizi olduğunu söylüyor. Tarayıcıda yerel bir isArray
yoksa, altyazı.js ikinci seçeneği kullanır: [object Array]
dizesiyle eşleşip eşleşmediğini görmek için nesne üzerinde toString
karşılaştırması.
Sadece bir özelliğin eklenmesi, nesnenin tip türünü değiştirmek için yeterli değildir (JavaScript sanal makinesine göre, hala bir dizi olan bir nesnedir). JavaScript dinamik bir dildir; bu, yerleşik nesnelere özellik ekleyebileceğiniz anlamına gelir, ancak bunu yapmakta olduklarını değiştirmez; sadece onları uzattın. Örneğin, Prototype.js, bunlara fazla özellik ekleyerek (yineleyiciler, filtreler, eşleme işlevleri vb.) Yerel nesneleri genişletmek için kullanılır.
Oldukça kolay Chrome'da davranışı görebilirsiniz
: tarayıcı bildirdi
> var arr = [1, 2, 3];
arr.something = "test";
console.log(arr.length, arr.something);
3 "test"
Bildirimi: dizi onun length
özelliğini kaybetmez
> var arr = [];
arr.something = "test";
> Array.isArray(arr);
true
> toString.call(arr);
"[object Array]"
DÜZENLEMEYİ
3
doğru uzunluğu ve test
f için doğru değer veya something
özelliği.
Çalıştığınız kod şu şekildedir: http://underscorejs.org/docs/underscore.html#section-112 –
Tahminimce bu satırı değerlendirirsiniz 'arr = []' 'arr' tipi ayarlandı. Bundan sonra, Sanal Makinanın, türün bir sonraki atamaya kadar değiştiğini bilmesi için bir fırsat yoktur. –
@Adi Inbar Bu başlık amaca yönelikti. Neden düzenledin? Bunu belirtmenin doğru yolu bu değil mi? – 1252748