gpt4 book ai didi

Javascript IIFE 作为对象的属性(方法)

转载 作者:行者123 更新时间:2023-11-29 19:42:40 24 4
gpt4 key购买 nike

我正在尝试使用 IIFE 作为方法(这可能是错误的)。

为什么?因为,我正在尝试实现代理设计模式。

在 adobe extendscript 中,有一个“app”对象可以访问文档等,比如 -

var length = app.activeDocument.length; // or some other property

现在,我想在“app”周围放置一个代理。所以我创建了一个代理对象 -

var AppProxy = {
activeDocument: function() { // do stuff...; return app.ActiveDocument; }
}

但是现在,这就是我必须访问它的方式 -

var length = AppProxy.activeDocument().length;

但这就是我想要访问它的方式 -

var length = AppProxy.activeDocument.length; // no parenthesis

所以我阅读了有关 IIFE 的内容,并最终这样做了 -

var AppProxy = {
activeDocument: (function() {
// do stuff...;
return app.ActiveDocument; })()
}

正如预期的那样,AppProxy.activeDocument 会在定义 AppProxy 时自动调用,即甚至在它达到 var length = AppProxy.activeDocument.length.

那么,当 AppProxy 被定义为对象文字时,我该如何防止这种情况发生呢?我的要求有解决方法吗?

谢谢。

最佳答案

But this is how I want to access it -

var length = AppProxy.activeDocument.length; // no parenthesis

为此,您需要将 activeDocument 定义为具有 getter 函数的属性。这在带有 proper support 的浏览器中是可能的对于 ES5 的 getter 和 setter,这是所有现代浏览器(不是 IE8 和更早版本)。 (在 ES5 之前,有一些浏览器支持的从未标准化的语法,但同样不支持 IE8 或更早版本)。

在 ES5 中,您可以使用 Object.defineProperty 来完成此操作或者通过在对象初始值设定项中定义一个 getter。这是 Object.defineProperty:

// ES5+ only
var AppProxy = {};
Object.defineProperty(AppProxy, "activeDocument", {
get: function() {
// do stuff...;
return app.ActiveDocument;
}
});

这是作为对象初始值设定项的一部分进行的:

// ES5+ only
var AppProxy = {
get activeDocument() {
// do stuff...;
return app.ActiveDocument;
}
};

完成其中任何一个,然后:

var length = AppProxy.activeDocument.length;

...运行该函数,即使它看起来不像它运行的那样。函数调用仍然发生,它只是被隐藏了。

但是,如果您需要支持过时的浏览器(即使在 2016 年年中,IE8 仍有约 5% 的市场份额),或者如果您不想隐藏您正在调用函数的事实,只需调用函数:

var length = AppProxy.activeDocument().length;

关于Javascript IIFE 作为对象的属性(方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008397/

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