Объект JavaScript: свойство переменной доступа по имени в виде строки

Если у меня есть объект javascript, который выглядит ниже

var columns = {
  left: true,
  center : false,
  right : false
}

и у меня есть функция, которая передается как объекту, так и имени свойства так

//should return false
var side = read_prop(columns, 'right');

Как выглядит тело read_prop(object, property)?

Ответы

Ответ 1

Вам не нужна функция - просто используйте скобку нотации:

var side = columns['right'];

Это равно dot notation, var side = columns.right;, за исключением того факта, что right также может быть получен из переменной, возвращаемое значение функции, и т.д. при использовании обозначения скобок.

Если вам нужна функция для него, вот что:

function read_prop(obj, prop) {
    return obj[prop];
}

Ответ 2

Ответ ThiefMaster на 100% правильный, хотя я столкнулся с аналогичной проблемой, когда мне нужно было получить свойство из вложенного объекта (объекта внутри объекта), поэтому в качестве альтернативы его ответу вы можете создать рекурсивное решение, которое позволит вам определить номенклатуру для захвата любого имущества независимо от глубины:

function fetchFromObject(obj, prop) {

    if(typeof obj === 'undefined') {
        return false;
    }

    var _index = prop.indexOf('.')
    if(_index > -1) {
        return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
    }

    return obj[prop];
}

Если ваша ссылка на ссылку на заданное свойство ressembles property1.property2

Код и комментарии в JsFiddle.

Ответ 3

Так как мне помогли с моим проектом, ответом выше (я задал двойной вопрос и был указан здесь), я отправляю ответ (мой тестовый код) для обозначения скобок при вложенности в var:

<html>
<head>
  <script type="text/javascript">
    function displayFile(whatOption, whatColor) {
      var Test01 = {
        rectangle: {
          red: "RectangleRedFile",
          blue: "RectangleBlueFile"
        },
        square: {
          red: "SquareRedFile",
          blue: "SquareBlueFile"
        }
      };
      var filename = Test01[whatOption][whatColor];
      alert(filename);
    }
  </script>
</head>
<body>
  <p onclick="displayFile('rectangle', 'red')">[ Rec Red ]</p>
  <br/>
  <p onclick="displayFile('square', 'blue')">[ Sq Blue ]</p>
  <br/>
  <p onclick="displayFile('square', 'red')">[ Sq Red ]</p>
</body>
</html>