我正在研究一个创建提供的对象副本的函数。我大部分都了解发生了什么,除了涉及this
关键字的行。我确实知道,this
关键字的原始设计是要指向类定义中的对象的实例,如果我们返回从{{1借来的} this
关键字的起源}}。但是JavaScript决定使用C++
关键字来提供一项附加功能,该功能带有指向执行上下文的链接。在下面的示例中,我试图理解为什么我们使用this
关键字。如果您有任何想法,我将不胜感激。
this
答案 0 :(得分:1)
当对特殊值使用JSON.parse
/ stringify
进行序列化/反序列化时,它用于处理嵌套对象。
在replacer / reviver函数中,this
上下文是序列化程序(stringify
)或反序列化程序(parse
)正在处理的当前对象。
例如,对于以下对象:
myObject = {
"foo": {
"bar": function () {}
},
"bar": "Different bar"
}
在处理项目myObject["foo"]["bar"]
时,替换程序中的this
将通过myObject["foo"]
和key = "bar"
引用value = function () {}"
。这很有用,因为如果没有参考,我们将不知道我们是在处理myObject["bar"]
还是myObject["foo"]["bar"]
。
因此,当将其保存到数组中时,实际上只是保存了pair = [myObject["foo"], "bar"]
。稍后恢复时,对于每个对,它都可以执行pair[0][pair[1]]
来恢复myObject["foo"]["bar"]
。
这与reviver和undefined相似。此处的问题在于,恢复程序无法返回undefined
并将其值设置为undefined,因此代码段会记住哪些键是这样的,并对对象的副本进行后处理以正确设置它们。