Как получить имя объекта в JavaScript - PullRequest
0 голосов
/ 16 февраля 2019

Это НЕ о том, как получить ключи или значения

В приведенном ниже примере:

var exampleObject = {startIndex: 1, stopIndex: 2};

Как я могу получить точное имя "exampleObject" этого объекта?Я попытался exampleObject.constructor.name, но в результате получил только "Object".

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вы не можете. *

Прежде всего, несколько переменных могут указывать на один и тот же объект.Переменные являются только ссылками, а не контейнерами.Нет единственного истинного имени для объекта.Вот пример:

function makeExample() () {
  var x = {startIndex: 1, stopIndex: 2};
  var y = x;
  return y;
}

var z = makeExample();

В приведенном выше коде, каким должно быть имя объекта?x, y, z?Все эти переменные не содержат копию объекта, они указывают на один и тот же объект.exampleObject - это имя переменной, а не имя объекта.

Имя переменной - это просто метка, которую должен использовать программист, а не код.Это не то же самое, что свойство , которое представляет собой данные, хранящиеся внутри объекта и идентифицируемые с помощью ключа , который является либо строкой, либо символом.Если объект должен иметь имя, то он должен быть частью его собственных свойств :

var exampleObject = { name: "exampleObject" };

* Технически, любая переменная, созданная с помощью var в глобальномобласть действия сценария, который не выполняется как модуль, будет добавлена ​​к объекту window.Это пережиток прошлого, и вы не должны на это полагаться - фактически, современный код JS должен использовать let для создания переменных, которые не имеют такого поведения.

0 голосов
/ 16 февраля 2019

Единственный способ, которым я знаю, это сделать с помощью этой пользовательской функции:

var returnObjectName = function (object) {
  var objectName;
  for(var i in window){
    if(window[i] === object) {
      objectName = i;
    }
  }
return objectName;
}
(обратите внимание, что эта функция может запутаться, если существует объект с тем же значением, что и имя объекта, которое вы пытаетесь найти!)

Если я сделал что-то не так, не простопонизьте мой ответ, но и скажите, что я сделал не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...