Что происходит в консоли, когда я смотрю свойства геттера для объектов DOM?

Мне нужна была простая в использовании библиотека C ++ для разбора CSV-файлов, но я не мог найти ее, поэтому я закончил ее создание. Rapidcsv - это библиотека заголовков C ++ 11, которая дает прямой доступ к разбору столбцов (или строк) в виде векторов в выбранном типе данных. Например:

#include 
#include 
#include 

int main()
{
  rapidcsv::Document doc("../tests/msft.csv");

  std::vector close = doc.GetColumn("Close");
  std::cout << "Read " << close.size() << " values." << std::endl;
}

16
задан Snow 20 February 2019 в 10:02
поделиться

3 ответа

Есть несколько вещей, о которых нужно знать.

  1. Во-первых, операторы console. * (Кроме .error) являются асинхронными, вы передаете объект документа по ссылке, который может фактически измениться между передачей его в console.FN и фактическим выводом в окно журнала.
  2. Во-вторых, браузер имеет доступ к большему, чем вы могли бы через JS API напрямую с точки зрения опроса.
  3. В-третьих, сам документ может иметь цепочку наследования, которая включает в себя такие вещи, как домен, который не является частью самого экземпляра документа.
  4. В-четвертых, не все свойства являются итеративными по своей структуре, но все же могут отображаться в журнале (см. № 2 выше)
0
ответ дан Tracker1 20 February 2019 в 10:02
поделиться

Можно ли создать объект с таким же поведением регистрации, как и эти, когда console.diring объекта также немедленно вызовет любые методы получения в цепочке прототипов вместо отображения (...)?

С технической точки зрения да, несмотря на то, что он не будет точно оценивать геттеры (я не уверен, что значения, которые вы видите, оцениваются, когда вы console.dir их). Вам необходимо оценить недвижимость. Однако использование hasOwnProperty вернет true.

// look at results in Chrome's browser console, not snippet console
class theProto {
  get foo() {
    return 'fooVal';
  }
  set foo(arg) {
    // do something
  }
}
class theClass extends theProto {
   foo = (() => theProto.prototype.foo)(); // or, really, just (() => this.foo)();
}
const instance = new theClass();
console.dir(instance);

enter image description here

Рабочая скрипка: https: //jsfiddle.net/vL6smo51/1/

0
ответ дан briosheje 20 February 2019 в 10:02
поделиться

Оператор document.hasOwnProperty() возвращает true только в том случае, если объект имеет указанное свойство как собственное свойство (в отличие от его наследования). По этой причине свойство домена наследуется от объекта HTMLDocument. HTMLDocument является прототипом документа. Так что он возвращает ложь.

0
ответ дан Dilan Waduge 20 February 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: