gpt4 book ai didi

JavaScript: "safe"对象如何工作?

转载 作者:行者123 更新时间:2023-11-28 10:46:11 26 4
gpt4 key购买 nike

所以,这个代码片段工作起来非常方便,但我对它的工作方式感到有点惊讶。

var makeTree = function(h,s)
{
var height = h;
var season = s;

tree = {};

tree.getHeight = function()
{
return height;
}

tree.getSeason = function()
{
return season;
}

return tree;
}

正如你所看到的,我正在尝试创建一个类树来创建树对象,但是为了使所有属性安全,我有一个 makeTree 函数,该函数将树对象返回给我,并且我只能访问通过 getHeight 和 getSeason 获取其属性。

需要注意的是,树对象根本不包含字段高度和季节。

所以,假设我这样做:

var banyan = makeTree(100,"summer");
var apple = makeTree(50,"winter");

我可以像这样访问两个对象的字段:

banyan.getSeason();
//"summer"
apple.getHeight();
//50

我的问题是这到底是怎么发生的?

所以,我想到了这一点,猜测也许这就是它的工作原理:当我调用 makeTree 来制作榕树时,我用参数 100 调用它,并且 makeTree 函数返回给我一个带有常量函数 getHeight 的对象,该对象将打电话时总是给我 100。 (没有任何内存)

但后来我这样做了:

var makeTree = function(h,s)
{
var height = h;
var season = s;

tree = {};

tree.getHeight = function()
{
return height;
}

tree.getSeason = function()
{
return season;
}

tree.changeHeight = function(new_h) //added this
{
height = new_h;
}

return tree;
}

瞧!

banyan.changeHeight(60);
banyan.getHeight();
//60!!!!

好的,让我的问题非常清楚,因为每个对象根本没有任何用于存储值的字段,所以每个对象的高度和季节存储在哪里?

我以前学过Python、Java和C,所以如果有人能在解释时进行比较和对比,那就太好了!

最佳答案

当您运行此命令时:

var makeTree = function(h,s)
{
// ...
}

您创建一个闭包 - 函数体内的所有内容(包括变量定义和函数)都会被捕获并可以在以后访问。在您的情况下,您可以通过 getHeightgetSeason 函数等访问该闭包的内容。

关于JavaScript: "safe"对象如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506552/

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