gpt4 book ai didi

javascript - 为什么私有(private)函数无法访问Javascript对象中的成员变量?

转载 作者:行者123 更新时间:2023-11-28 17:04:07 25 4
gpt4 key购买 nike

我在理解使用 JavaScript 对象定义的字段的范围/访问时遇到问题。

考虑以下示例 JavaScript 对象定义:

function SampleObject(controlName) {

var _controlName = controlName;

this.Display1 = function() {
console.log(_controlName);
}

this.Display2 = function() {
Display3();
}

Display3 = function () {
console.log(_controlName);
}
}

现在考虑使用以下示例运行上述对象:

var a = new SampleObject("Bob");
var b = new SampleObject("Fred");

a.Display1(); //==> Displays "Bob"
b.Display1(); //==> Displays "Fred"

a.Display2(); //==> Displays "Fred"
b.Display2(); //==> Displays "Fred"

我难以理解的是如何从对象中定义的私有(private)函数中访问对象字段(属性)。在我的示例中,我很困惑为什么 _controlName 在通过两个对象的 Display2() 显示时具有值“Fred”<强>a和b

我怀疑这要么是 _controlName 和/或 Display3() 的定义方式存在问题,要么是我不清楚在这种情况下范围界定如何工作。有人可以分享一下这方面的情况吗?

谢谢,约翰

最佳答案

在其他一些语言中,例如 Java(我来自的语言),当您处于对象的方法内部时,this 是隐式的。在 Javascript 中,情况并非如此。

当您分配给 this.Display1this.Display2 时,您正在使用 this 指向的对象上的这些名称创建属性>。由于new,这每次都是一个不同的对象。

但是,当您分配给 Display3 时,您正在分配给全局变量。如果它不存在,则会为您创建。当您调用 new SampleObject("Fred"); 时,最初记录“Bob”的函数现在消失了,取而代之的是打印“Fred”的函数。

如果添加'use strict';在 SampleObject 函数的顶部,该函数抑制了这种“隐式全局”行为,当您尝试分配给从未声明的变量 Display3 时,您会收到引用错误。

关于javascript - 为什么私有(private)函数无法访问Javascript对象中的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351525/

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