non sono stato in grado di trovare nella documentazione alcuna spiegazione ufficiale, ma ho una buona congettura sulla base di alcuni test che in grigio attributi sono quelli che sono predefiniti/set dal motore Javascript e non dal codice stesso. Ecco alcuni esempi:
length
in un array
var foo = [1,2,3,45,1337];
console.dir(foo);
cede la console:
Si noti che gli indici non sono visualizzati in grigio ma length
e tutto in __proto__
è.
prototipazione
Il codice da 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);
Dà nella console:
Ci sono un sacco di cose interessanti qui. Tutte le istanze di greet
non sono disattivate. Comunque ovunque __proto__
è disattivato (probabilmente perché è impostato dal motore sul suo prototipo). Anche il costruttore sottoposto a override da Person
è disattivato, ma il costruttore di Employee
impostato in modo esplicito non è disattivato.
Quindi penso che ci sia uno schema approssimativo qui, che è che Chrom (e/ium) mette in ombra le proprietà che pensa che sarà meno probabile che gli importi, sia perché sono state ereditate o impostate dal motore come un costrutto del linguaggio, ma sembra non essere perfetto. (Ma chi è, giusto?) Un'altra cosa interessante da provare è F12 e digitare console.dir(window)
. Lì vedrai quasi tutto in grigio, ad eccezione delle cose inserite nel namespace della finestra globale dal Javascript del sito web.
Queste proprietà sbiadite hanno valori non appena si espande l'oggetto oppure è necessario fare clic su '(...)'? – apsillers
@apsillers, nel mio esempio avevo bisogno di cliccarli. Sicuramente correlato all'attributo enumerabile nella tua risposta però. Grazie – Ben
Ho chiesto perché i nomi di proprietà in corsivo indicano una funzione getter, ma i getter in corsivo causano anche il comportamento '(...)'. Se avessi una proprietà in corsivo senza '(...)', sarebbe strano. L'hai fatto, però, quindi è perfettamente normale. (Ho aggiunto un po 'alla mia risposta al riguardo.) – apsillers