I nie były w stanie znaleźć w dokumentacji żadnego oficjalnego wyjaśnienia, ale mam dobre przypuszczenie na podstawie niektórych badań, które wyszarzonych atrybuty są te, które są domyślnie/set silnikiem JavaScript i nie przez sam kod. Oto kilka przykładów:
length
w tablicy
var foo = [1,2,3,45,1337];
console.dir(foo);
daje w konsoli:
Zauważmy, że indeksy nie są wyszarzone ale length
i wszystko w __proto__
jest.
prototypowania
Kod z 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);
Daje w konsoli:
Istnieje wiele ciekawych rzeczy tutaj. Wszystkie wystąpienia greet
nie są wyszarzone. Jednak wszędzie __proto__
jest wyszarzony (prawdopodobnie dlatego, że jest ustawiony przez silnik na jego prototyp). Również nadpisany konstruktor z Person
jest wyszarzony, ale jawnie ustawiony konstruktor Employee
nie jest wyszarzony.
Myślę więc, że istnieje tutaj szorstki wzorzec, który polega na tym, że Chrom (e/ium) wyszczerbia właściwości, które według nich są mniej prawdopodobne, ponieważ zostały odziedziczone lub ustawione silnik jako konstrukcja języka, ale wydaje się, że nie jest doskonały. (Ale kto jest, prawda?) Kolejną interesującą rzeczą, którą można wypróbować, jest F12 i wpisz console.dir(window)
. Zobaczysz prawie wszystko w szarym kolorze, z wyjątkiem rzeczy umieszczonych w globalnej przestrzeni nazw okna przez skrypt JavaScript strony.
Czy te wyblakłe właściwości miały wartości zaraz po rozszerzeniu obiektu, czy też musielieś kliknąć '(...)'? – apsillers
@appillers, w moim przykładzie musiałem je kliknąć. Zdecydowanie związany z przeliczalnym atrybutem w twojej odpowiedzi. Dzięki – Ben
Zapytałem, ponieważ nazwy kursywy wskazują na funkcję pobierającą, ale kursywa pochyła również powodują zachowanie '(...)'. Gdybyś miał kursywę bez '(...)', to byłoby to niezwykłe. Zrobiłeś to jednak, więc jest to zupełnie normalne. (Dodałem trochę do mojej odpowiedzi na ten temat.) – apsillers