克隆函数实现中'this'关键字的执行上下文

时间:2019-06-18 00:38:09

标签: javascript

我正在研究一个创建提供的对象副本的函数。我大部分都了解发生了什么,除了涉及this关键字的行。我确实知道,this关键字的原始设计是要指向类定义中的对象的实例,如果我们返回从{{1借来的} this关键字的起源}}。但是JavaScript决定使用C++关键字来提供一项附加功能,该功能带有指向执行上下文的链接。在下面的示例中,我试图理解为什么我们使用this关键字。如果您有任何想法,我将不胜感激。

this

1 个答案:

答案 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,因此代码段会记住哪些键是这样的,并对对象的副本进行后处理以正确设置它们。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter