gpt4 book ai didi

闭包函数内部 'this' 范围的 Javascript 混淆

转载 作者:行者123 更新时间:2023-11-30 20:58:55 25 4
gpt4 key购买 nike

我尝试了下面的函数来理解 this 关键字范围全局/私有(private)。

我理解了 97%。但对 x.private_fa() 的输出感到困惑,它返回一个私有(private)函数而不是其中的私有(private)值。

a = 1.1;
b = 2.1;
c = 3.1;

function fa() {
return "Global fa()";
}

function f() {
var a = 1;
this.b = 2;

function fa() {
return this.b; // or this.a not working..!
//return b // 2.2
//return a // 1
}

return {
private_a: a, // 1
global_a: window.a, // 1.1
private_b: this.b, // 2
global_b: b, // 2.1
private_fax: fa(), // 2.1
private_fa: fa, // function private fa()
global_fa: window.fa(), // Global fa()
global_c: c, // 3.1
private_c: this.c // 3
};
}

try {

f.prototype.c = 3;

var x = new f();

f.prototype.c = 4;

console.log("x:", x);

/*??? Please explain this.. ??? */
console.log("x.private_fa():", x.private_fa());

console.log(x.private_c);
var x1 = new f();
console.log(x1.private_c);

console.log(" - End - ");
} catch (e) {
console.error("Error: ", e.message);
}

最佳答案

在您发布的代码中,对 x.private_fa() 的调用返回 undefined,只是因为对象 x 没有 b 成员(并且 fa 返回 this.b)。

如果你想让它返回那个值,让你的对象的 private_fa 返回一个绑定(bind)版本的“private” fa():

var bound_fa = fa.bind(this);

return {
private_a: a, // 1
global_a: window.a, // 1.1
private_b: this.b, // 2
global_b: window.b, // 2.1
private_fax: fa(), // 2.1
private_fa: bound_fa, // function private fa()
global_fa: window.fa(), // Global fa()
global_c: window.c, // 3.1
private_c: this.c // 3
};

bound_fa 函数中,this 将永远绑定(bind)到 f() 上下文(其中所需的变量 b 属于)。

此阅读可以进一步澄清这个 之谜:https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes/ch1.md

关于闭包函数内部 'this' 范围的 Javascript 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com