gpt4 book ai didi

javascript - 在 Javascript 中更改 ["foo"] 的含义?

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

我想让 foo["bar"] 正常返回 bar 字段值,但如果它不存在,请在另一个对象中查找它。是否可以替换 [] 的工作方式?

为什么?我正在将一个 6 年前的 Javascript 应用程序移植到 AngularJS。在现有的应用程序中,(当然)有一个全局变量(我们称之为 i2)用作命名空间,应用程序中的所有内容都附加到它。

i2.models.fooModel.bar += 1; //and the rest of the app is similar

如果这还不够,i2 还用作应用程序“单元格”的注册表,如下所示:

var myCell = i2["MyCell"]; 

我正在将全局字段分解为 AngularJS 服务。单元查找功能也被分解为另一个服务“单元注册”服务。由于此应用程序具有我们希望向后兼容的现有插件,因此我希望现有插件中的代码如下:

var myCell = i2["MyCell"]; 

... 仍然有效(尽管已弃用)。有没有一种方法可以替换 i2 中的 [] 函数来查找 i2 中的字段,如果它不存在,则在另一个对象(单元格注册表)中查找它?

最佳答案

不,你不能直接并从字面上改变

i2["MyCell"]

因为这是语言的设计,通常无法更改(如果可以的话,那就太糟糕了)。但是,您可以这样做:

function lookupVar(key) {
var value = i2[key];
if(typeof value !== "undefined") {
return value;
}

// do whatever you want to do now that it couldn't be found
}

var myCell = lookupVar("MyCell");

当然,这可以扩展到处理其他事情,而不仅仅是单个变量 i2。它也可能根本不需要,一个简单的

var myCell = typeof i2["MyCell"] !== "undefined" ? i2["MyCell"] : somethingElse["MyCell"];

可能就足够了(尽管它包含恼人的重复)。如果你知道如果它们的键存在于 i2["MyCell"] 中,它就不会是一个伪值 (0, "" , false, …), 那么这就足够了

var myCell = i2["MyCell"] || somethingElse["myCell"];

虽然它不是很适合 future 。

关于javascript - 在 Javascript 中更改 ["foo"] 的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292060/

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