Как это левостороннее назначение для вызова функции работает в JScript? - PullRequest
2 голосов
/ 05 августа 2020

Я искал способ записывать сообщения в журнал установщика с помощью JScript и наткнулся на этот ответ:

Как отлаживать настраиваемое действие MSI, реализованное в Javascript?

Отлично работает. Однако в коде есть что-то интригующее, чего я не смог понять. В этом методе:

// spool an informational message into the MSI log, if it is enabled. 
function LogMessage(msg) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction:: " + msg;
    Session.Message(MsgKind.Log, record);
}

Как работает строка record.StringData(0) = "CustomAction:: " + msg; с точки зрения синтаксиса / semanti c? Мне кажется, это попытка присвоить значение возвращаемому значению вызова функции, которое должно быть незаконным или в лучшем случае отключенным? Тем не менее, он работает, и сообщение выводится в журнал.

Что мне не хватает?

1 Ответ

1 голос
/ 05 августа 2020

Это способ JScript доступа к спискам, а не фактическая функция. Поэтому он не генерирует Invalid left-hand side in assignment.

StringData - это список значений. Фактически вы устанавливаете значение индекса 0. Это похоже на установку значения в массив с помощью arr[0] = 'xyz'. В вашем примере вы также можете опустить его:

record.StringData = "CustomAction:: " + msg;

Синтаксис

propVal = Record.StringData
Record.StringData = propVal 

Значение свойства

Обязательный номер поля значения в записи, начиная с 1.

Замечания

Возвращаемое значение несуществующего поля - пустая строка. Чтобы установить для поля строки записи значение NULL, используйте либо пустой вариант, либо пустую строку. Попытка сохранить значение в несуществующем поле вызывает ошибку.

Источник: Патрик

...