Я разрабатываю скрипт в приложениях Google Apps ContactsApp для импорта/изменения контактов и устранения дубликатов. Надеюсь, мой вопрос четко выражен, так как я говорю по-французски. Этот код работает в SpreadsheetApp. Для ясности я заменил код SpreadsheetApp.getUi().alert(str)
на alert()
.Объекты Javascript с вложенными (внутренними) методами
Я не нашел именно то, что искал на форуме.
Вот (упрощенный) код:
function ObjContact(givenName, familyName, email) {
this.givenName = givenName;
this.familyName = familyName;
this.fullName = "";
this.email = email;
// other properties snipped
setFullName(); // declared below
this.setGivenName = function(str) {
this.givenName = str;
setFullName();
return this;
}
this.setFamilyName = function(str) {
this.familyName= str;
setFullName();
return this;
}
// I want this function to be accessed only from inside the object
// by the object itself, to set
function setFullName() {
fullName = givenName + " " + familyName;
return;
}
// other getters and setters snipped
}
Речь идет о методе setFullName()
, который не изменяет свойство fullName
. Использование this.fullName
, похоже, делает свойство локальным для метода. Добавление кода alert(this.givenName);
возвращает undefined
, но alert(givenName);
возвращает givenName
правильное значение. Итак, я не понимаю, почему fullName
никогда не менялся ...
Мне нужны другие методы для сравнения и объединения дубликатов контактов, прежде чем возвращать их в ContactsApp, удаляя их.
функция setFullName() { this.fullName = this.prenom + "" + this.nom; возвращение; } –
Я перевел свои имена переменных на английский, но забыл это.prenom (перевод на это.givenName) и this.nom (переведен на this.familyName). Ошибка исправлена. –
Код, который вы предлагаете, тот, который я написал первым. Сеттер не работает, и переменная, созданная в ObjContact.fullName, возвращает "". –