具有嵌套(内部)方法的Javascript对象

具有嵌套(内部)方法的Javascript对象,javascript,google-apps-script,Javascript,Google Apps Script,我正在Google apps ContactsApp中开发一个脚本,用于导入/修改联系人并处理副本。我希望我的问题能清楚地表达出来,因为我会说法语。此代码在电子表格应用程序中运行。为了清晰起见,我将代码SpreadsheetApp.getUi().alert(str)替换为alert() 我没有在论坛上找到我想要的东西 以下是(简化)代码: 问题是关于不更改属性fullName的方法setFullName()。使用this.fullName似乎使属性成为方法的本地属性。添加代码警报(this.g

我正在Google apps ContactsApp中开发一个脚本,用于导入/修改联系人并处理副本。我希望我的问题能清楚地表达出来,因为我会说法语。此代码在电子表格应用程序中运行。为了清晰起见,我将代码
SpreadsheetApp.getUi().alert(str)
替换为
alert()

我没有在论坛上找到我想要的东西

以下是(简化)代码:

问题是关于不更改属性
fullName
的方法
setFullName()
。使用
this.fullName
似乎使属性成为方法的本地属性。添加代码
警报(this.givenName)返回
未定义
警报(给定名称)
返回
givenName
正确的值。所以,我不明白为什么
全名
从未改变过


我需要其他方法来比较和合并重复的联系人,然后再将其返回到ContactsPP,删除它们。

您可以设置指向此联系人的指针,该指针将与构造函数主体中的父联系人相匹配:

var that = this;
然后在
setFullName()
中使用它:

setFullName()
中的
this
似乎与构造函数主体中的
this
不同


关于这个主题,这里有一个很好的教程:

function setFullName(){this.fullName=this.prenom+“”+this.nom;return;}我把变量名翻译成了英语,但忘了this.prenom(翻译成this.givenName)和this.nom(翻译成this.familyName)。更正错误。您建议的代码就是我首先编写的代码。setter不起作用,实例化为ObjContact.fullName的变量返回“”。现在它应该是函数setFullName(){this.fullName=this.givenName+“”+this.familyName;}如果对您不起作用,请说明如何调用setter并检查值。@Roman Granovsky。谢谢你,罗曼。我在下面的答案中发布了代码,以及对象和测试代码。谢谢@ebyrob。它起作用了。但有一件事我不明白:为什么在全名前面需要“that”,而在givenName和familyName前面不需要“that”?谢谢你启发我!请注意,我编辑了原始代码以更正两个用法语编写的变量,并且在发布原始代码时忘记了翻译。this.prenom现在是this.givenName,this.nom变成this.familyName。它改变了什么吗?再次感谢。@Étienne此
的上下文在构造函数的主体和内部函数之间是不同的。(
this
仅指内部的
setFullName()
)@Étienne我添加了一个指向该主题教程的链接。注意:只要变量名是一致的,就不会影响结果。我绝对有一些范围误解。。。从setGivenName()或setFamilyName中运行方法setFullName不会改变this.fullName。我已经15年没有编程了,现在我正在尝试我的第一个javascipt对象。有任何提示或可访问的参考建议吗?谢谢
var that = this;
function setFullName() {
    that.fullName = givenName + " " + familyName;
    return;
}