Object.getOwnPropertyNames()
Numaralandırılabilir olsun veya olmasın, bir nesneye ait tüm özellikleri almak için kullanabilirsiniz . Örneğin:
console.log(Object.getOwnPropertyNames(Math));
//-> ["E", "LN10", "LN2", "LOG2E", "LOG10E", "PI", ...etc ]
Daha sonra filter()
yalnızca yöntemleri elde etmek için kullanabilirsiniz :
console.log(Object.getOwnPropertyNames(Math).filter(function (p) {
return typeof Math[p] === 'function';
}));
//-> ["random", "abs", "acos", "asin", "atan", "ceil", "cos", "exp", ...etc ]
ES3 tarayıcılarda (IE 8 ve altı), yerleşik nesnelerin özellikleri numaralandırılamaz. Nesneler gibi window
ve document
yerleşik değildir, tarayıcı tarafından tanımlanır ve büyük olasılıkla tasarımla numaralandırılabilir.
Gönderen ECMA-262 sürüm 3 :
Genel Nesne
Denetim herhangi bir yürütme içeriğine girmeden önce oluşturulan benzersiz bir genel nesne (15.1) vardır. Başlangıçta global nesne aşağıdaki özelliklere sahiptir:
• Math, String, Date, parseInt, vb. Gibi yerleşik nesneler. Bunların {DontEnum} öznitelikleri vardır .
• Ek ana bilgisayar tanımlı özellikler. Bu, değeri global nesnenin kendisi olan bir özelliği içerebilir; örneğin, HTML belgesi nesne modelinde global nesnenin window özelliği global nesnenin kendisidir.
Denetim yürütme bağlamına girdiğinde ve ECMAScript kodu yürütüldükçe, genel nesneye ek özellikler eklenebilir ve ilk özellikler değiştirilebilir.
Bunun, bu nesnelerin Global nesnenin numaralandırılabilir özellikleri olmadığı anlamına geldiğini belirtmeliyim. Teknik özellik belgesinin geri kalanına bakarsanız, bu nesnelerin yerleşik özelliklerinin ve yöntemlerinin çoğunun üzerinde { DontEnum }
öznitelik ayarlanmış olduğunu görürsünüz .
Güncelleme: bir SO kullanıcısı, CMS, dikkatimi çeken bir IE hatası{ DontEnum }
getirdi .
DontEnum özniteliğini kontrol etmek yerine, [Microsoft] JScript, nesnenin prototip zincirinde DontEnum özniteliğine sahip aynı adlı bir özelliğin bulunduğu herhangi bir nesnede herhangi bir özelliği atlar.
Kısacası, nesne özelliklerinizi adlandırırken dikkatli olun. Aynı ada sahip yerleşik bir prototip özelliği veya yöntemi varsa, for...in
döngü kullanılırken IE üstünden atlar .