Bir nesnenin tüm yöntemleri nasıl görüntülenir?
Örneğin bir nesne için mevcut tüm yöntemleri nasıl listeleyeceğimi bilmek istiyorum:
alert(show_all_methods(Math));
Bu yazdırılmalıdır:
abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random,round, sin, sqrt, tan, …
229
3
Sayılabilir olsun ya da olmasın, bir nesneye ait tüm özellikleri almak için
Object.getOwnPropertyNames()
kullanabilirsiniz. Örneğin:Daha sonra sadece yöntemleri elde etmek için
filter()
kullanabilirsiniz:ES3 tarayıcılarında (IE 8 ve daha düşük), yerleşik nesnelerin özellikleri numaralandırılamaz. Window
ve
document` gibi nesneler yerleşik değildir, tarayıcı tarafından tanımlanırlar ve büyük olasılıkla tasarım gereği numaralandırılabilirler.ECMA-262 Sürüm 3]1'den:
Bunun, bu nesnelerin Global nesnesinin numaralandırılabilir özellikleri olmadığı anlamına geldiğini belirtmeliyim. Spesifikasyon belgesinin geri kalanına bakarsanız, bu nesnelerin yerleşik özelliklerinin ve yöntemlerinin çoğunun üzerinde
{ DontEnum }
niteliğinin ayarlandığını göreceksiniz.Güncelleme: SO kullanıcısı CMS,
{ DontEnum }
]2 ile ilgili bir [IE hatasını] dikkatime sundu.JScript, DontEnum özniteliğini denetlemek yerine, nesne'nin prototip zincirinde DontEnum özniteliğine sahip aynı adlı bir özelliğin bulunduğu herhangi bir nesnedeki herhangi bir özelliğin üzerinden atlar.
Kısacası, nesne özelliklerinizi adlandırırken dikkatli olun. Eğer aynı isimde yerleşik bir prototip özellik ya da yöntem varsa, IE
for...in
döngüsünü kullanırken bunu atlayacaktır.Bu şekilde,
obj
üzerinde çağırabileceğiniz tüm yöntemleri elde edersiniz. Bu, prototipinden "miras" aldığı yöntemleri de içerir (javadaki
getMethods()gibi). Eğer sadece
objtarafından doğrudan tanımlanan yöntemleri görmek istiyorsanız
hasOwnProperty` ile kontrol edebilirsiniz:Kısa cevap, yapamazsınız çünkü
Math
veDate
(aklıma ilk gelenler, eminim başkaları da vardır) normal nesneler değildir. Bunu görmek için basit bir test betiği oluşturun:Belgenin genel olarak yaptığı gibi bir nesne olarak sunulduğunu görürsünüz, ancak aslında bu nesneyi görmeye çalıştığınızda, bunun yerel kod olduğunu ve numaralandırma için aynı şekilde gösterilmeyen bir şey olduğunu görürsünüz.