2015-04-23 20 views
19

Konsolun konsolunda konsol.dir() kullanılırken bir nesnenin özelliği hafifçe soluk olduğunda ne anlama gelir. Örneğin, bu ekran görüntüsünde "top, width, worldVisible, x & y" a bakın.Chrome Geliştirici Araçları Konsolu'nda console.dir özelliğini kullanırken soluk özelliklerin önemi nedir?

Screenshot of developer tools

API referans burada https://developer.chrome.com/devtools/docs/console-api#consoledirobject baktım ama hiç şansım oldu.

Teşekkür

+0

Nesneleri genişlettiğinizde, soluk özelliklerin değerleri var mıydı yoksa bir "(...)" yi tıklamanız mı gerekiyordu? – apsillers

+0

@apsillers, örneğimde onları tıkladım. Cevabınızdaki sayısız öznitelik ile kesinlikle alakalı. Teşekkürler – Ben

+0

Italic özellik adlarının bir getter işlevini gösterdiği, ancak italik alıcıların da (...) 'davranışına neden olduğu için sordum. Eğer (...) 'olmadan italik bir özelliği olsaydı, bu sıra dışı olurdu. Yine de var, bu yüzden tamamen normal. (Bu konuda cevabımı biraz ekledim.) – apsillers

cevap

24

Sayısız özellik belirtmek için soluk özellik belirleyici. Bunu yaparsak:

var a = {}; 
Object.defineProperties(a, { 
    hello: { enumerable: false }, 
    world: { enumerable: true } 
}); 
console.dir(a); 

sonra world değilken biz hello soluk görüyoruz.Kodunuzda

console image showing faded <code>hello</code> property

, sen for(prop in obj) { console.log(prop); } yaparsanız (eğer konsol ekran görüntüsünde bize gösteren ne olursa olsun nesne obj olduğu), yalnızca soluk özellikler numaralandırılan olmadığını göreceksiniz.

Ayrıca, bir enumerable: false özelliği ile bir nesneyi döndüren Object.getOwnPropertyDescriptor(obj, "worldVisible") ile de kontrol edebilirsiniz.

Özellik adlarındaki italik, özellik değerinin bir alıcı işlevi tarafından tanımlandığını gösterir. (Bu aynı zamanda, fonksiyonun çalıştırılmasından önce değerin (...) değerini göstermesine de neden olur.) Bu, adlandırmaların soluklaşmasına neden olan, sayılabilirlikten tamamen ayrı bir sorundur. Numaralandırılmamış, soluk olmayan özelliklerde olmayan italik getter tanımlı özelliklere sahip olabilirsiniz.

+0

Orijinal nesne de dahil olmak üzere birkaç sınama yürüttü ve doğru cevap gibi görünüyor. Ayrıca herşeyi bilmeye değer olduğu anlamına gelir, bu yüzden sorduğuma sevindim. – Ben

0

Ben belgelerinde herhangi bir resmi açıklama bulmak mümkün olmamıştır ama özelliklerini gri bazı testler vardır dayanan bir tahminde var JavaScript motoru tarafından belirlenen varsayılan olanlar/ve kodun kendisi tarafından değil.

var foo = [1,2,3,45,1337]; 
console.dir(foo); 

konsolunda verir bir Array içinde

length: İşte bazı örnekler __proto__ olduğu içinde endeksleri gri ama length ve her şey değildir

console screenshot with length grayed out

Bildirim söyledi.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype#Examples

var Person = function() { 
    this.canTalk = true; 
}; 

Person.prototype.greet = function() { 
    if (this.canTalk) { 
    console.log('Hi, I am ' + this.name); 
    } 
}; 

var Employee = function(name, title) { 
    Person.call(this); 
    this.name = name; 
    this.title = title; 
}; 

Employee.prototype = Object.create(Person.prototype); 
Employee.prototype.constructor = Employee; 

Employee.prototype.greet = function() { 
    if (this.canTalk) { 
    console.log('Hi, I am ' + this.name + ', the ' + this.title); 
    } 
}; 

var bob = new Employee('Bob', 'Builder'); 
bob.greet(); 
console.dir(bob); 

den

kod

prototip konsolda verir: Burada ilginç bir çok şey vardır

enter image description here

. Tüm örnekleri greet gri değil. Ancak her yerde __proto__ grileşmiştir (muhtemelen motor tarafından prototipine ayarlandığı için). Ayrıca Person dan geçersiz kılınan yapıcı gri olur, ancak Employee açıkça belirlenen yapıcı gri edilmez.

Bu yüzden burada kaba bir düzen olduğunu düşünüyorum. Bu, Chrom'un (e/ium), daha düşük olma olasılığınızı düşündüğünün altını çizdiği özelliklerden biri ya kalıyor ya da dilin bir yapısı olarak motoru, ama mükemmel değil gibi görünüyor. (Ama kim, değil mi?) Denemeye başka ilginç şey F12 ve tip console.dir(window) etmektir. Orada, web sitesinin Javascript'i tarafından küresel pencere ad alanına konan şeyler dışında grileşmiş neredeyse her şeyi göreceksiniz.

İlgili konular