Kullandığınız, bir nesnenin non-enumerable özelliklerinin (ve muhtemelen prototipinden miras aldığı) özellikleridir. Onları JavaScript ile elde etmenin standart bir yolu olduğuna inanmıyorum.
Bir hata ayıklayıcısını kullanır ve bir nesneyi incelerseniz, genellikle bir nesnenin tüm özellikleri gösterilir (yalnızca numaralandırılmamış olanlar). Tüm ana tarayıcılarda şu anda yerleşik hata ayıklayıcılar var: Chrome'un Dev Araçları (Ctrl + ÜstKrkt + I); IE8 ve üstü "F12 Geliştirici Araçları" var; IE7 ve daha eski sürümler, VS.Net'in ücretsiz sürümü ile hata ayıklanabilir; Firefox'un son sürümlerinde yerleşik araçlar bulunur; eski sürümler için Firebug eklentisini alabilirsiniz; Opera'da Dragonfly var.
Güncelleme: söylediğin soru üzerine yorumlarında: Google Chrome'u 17 ve ben console.log
kullanarak bkz tek özelliği kullanıyorum
__proto__
olduğunu.
Sağ. {}
'un hiçbir özelliği yoktur, sadece bir prototiptir. __proto__
'un solundaki küçük oku tıklarsanız, size __proto__
'un özelliklerini gösterecektir. hasOwnProperty
, toString
, vb., Tüm özellikleri {}
prototipinden alır (Object.prototype
), nesnenin kendisinin özelliklerini değil.
JavaScript, bir nesnenin prototip ile desteklendiği anlamına gelen prototipal devralmayı kullanmaktadır. Nesnenin sahip olmadığı bir özellik değerini almaya çalışırsanız, JavaScript motoru, prototipin bu özelliğe sahip olup olmadığını görmek için nesnenin prototipine bakar; eğer öyleyse, bu değer kullanılır. Eğer prototip mevcut değilse, motor prototipinin prototipine bakar; ve böylece hiyerarşinin köküne ulaşana kadar. Bu nedenle, sahip oldukları kendi özelliklerine sahip nesneler hakkında bilgi alırsınız.
İşte yapıcı işlevi var:
İşte bir örnek. Nesne oluşturmak için new Foo
kullanırsak, JavaScript motorunun atayacağı prototip üzerinde bir özellik koyarız. Henüz
var f = new Foo();
f
hiç özelliklere sahiptir ve:
function Foo() {
}
Foo.prototype.bar = 42;
en o yapıcısını kullanarak bir nesne oluşturmak Let
console.log(f.bar); // 42
...Çünkü f
"bar" adlı bir özelliğe sahip olmadığından,modelinin prototipi olan Foo.prototype
nesnesine benziyor. Şimdi f
'ın "çubuk" özelliğini kaldırmak izin
f.bar = 67;
console.log(f.bar); // 67
: Şimdi
en f
vermek kendi "bar" özelliği let
delete f.bar;
erişmeyiz denerseniz ne olacak
f.bar
şimdi? Eğer 42
dersem
console.log(f.bar);
, üst işaretleri olsun. f
'un artık "bar" adı verilen bir özelliği olmadığından, prototipten almaya geri dönüyoruz. ECMAScript'e 3. baskısında
Foo.prototype.bar = 96;
console.log(f.bar); // 96
(çoğu tarayıcı 3rd edition çizgisinde bir şey uygulamak), bir prototip atamak için tek yol: Bu ilişki o kadar, canlı olduğunu
Not Bir nesne, yukarıdaki gibi bir yapıcı işlevinin prototype
özelliğiyle yapılır. 5th Edition ile, daha doğrudan bir yolu eklendi: Object.create
, sen doğrudan bir prototip nesne geçirebilirsiniz:
var proto = {bar: 42};
var obj = Object.create(proto);
console.log(obj.bar); // 42
proto.bar = 67;
console.log(obj.bar); // 67
Hangi tarayıcıyı kullandı Yani onları alabilir? Google Chrome'da, Google Chrome'u kullandığım – antyrat
@antyrat'ın tüm özelliklerini görüyorum 17 ve 'console.log'unu kullandığım tek özellik' __proto__'. – Randomblue
Bu özelliği açabilir ve içerde tüm sayısız özelliği göreceksiniz – antyrat