gpt4 book ai didi

javascript - 停留在一个简单的对象文字范围/引用问题上

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:39 25 4
gpt4 key购买 nike

这是我的结构示例:

this.is.a.really.long.namespace = {

inputs : {},
buttons : {},
panels : {},

fn : {

abc : function() {},
def : function() {}

}

};

现在,如您所见,我将我的输入、按钮、面板和函数存储在它们各自的对象文字中。问题出在 fn.abcfn.defpage.fn 内的任何其他函数中。我希望能够从 fn 的函数内访问我的 inputsbuttonspanels

显然,我知道我可以输入 this.is.a.really.long.namespace.inputs,但如您所见,那太长了,我不想为我需要在页面中引用对象的每个实例键入它。

有没有一种方法可以直接从 fn 中引用 inputsbuttonspanels

我想我可以做到:

fn : {

that : this.is.a.really.long.namespace,

abc : function() {},
def : function() {}

}

这将允许我在 fn.abc 中使用 that.inputs,但是该方法是否存在问题?我需要注意任何类型的开销吗?还是有更好的方法来实现这一点?

最佳答案

这没有错。事实上,您可能会出于以下原因减少开销:

  1. 对象层次结构的运行时分辨率较低
  2. 更少的字符 = 更短的脚本

更充实的结构是常用的“模块模式”。

Javascript 在内部效率相当低(例如,它没有真正的索引数组),因此您可以采取任何措施来减少运行时查找通常都是好的。创建一个指向长层次结构的指针比每次都使用完整的层次结构要快得多。这可能只在长循环中很重要,但由于它也更容易阅读,所以它只是速度快一点的好处 - 没有缺点。

(编辑)

要用直接的对象做到这一点,你可以做这样的事情,使用 jQuery 来简化添加属性:

this.is.a.long.namespace = {};
$.extend(this.is.a.long.namespace,
{ that: this.is.a.long.namespace,
... // other properties
});

一般来说,如果您要构建功能对象,模块模式会更好,因为它更灵活,并且允许您使用作用域来创建私有(private)变量/对象。

this.is.a.long.namespace = (function() 
{
var that = {},
somePrivateVariable;
function privateFunction() {
...
}
that.inputs = {};
...
// assign everything to "that"
return that;
}());

关于javascript - 停留在一个简单的对象文字范围/引用问题上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526230/

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