gpt4 book ai didi

javascript - iife 返回的函数无法正常工作

转载 作者:行者123 更新时间:2023-12-02 14:24:04 26 4
gpt4 key购买 nike

我正在尝试创建一个模块,并且我正在尝试使用正确的设计。我看到this library ,并且他们有一个 iife 返回一个模块的function。我尝试这样做:

(function() {
function MyModule() {
var something = 'something';
this.log = log();
}

MyModule.prototype.alert = function() {
alert(this.something);
};

function log() {
console.log('hello');
}

return MyModule;
})();

var module1 = new MyModule();

但我收到以下错误:

Uncaught ReferenceError: MyModule is not defined

这是相关的复制代码:

我做错了什么,该如何解决?

最佳答案

MyModule 位于 IIFE 闭包内部,因此从外部代码中看不到它。将 IIFE 的结果分配给 MyModule 变量

此外,您可能打算将 log 函数分配给正在构造的 MyModule,而不是其结果 (undefined)

最后,在构造函数中声明一个名为 something 的变量并不会将其指定为正在构造的对象的属性。如果您希望某些东西是私有(private)的,则必须在构造函数的闭包内声明 alert 方法:

var MyModule = (function() {
function MyModule() {
var something = 'something';
this.log = log;
// this.log = log();

this.alert = function() {
alert(something);
};
}

//MyModule.prototype.alert = function() {
// alert(this.something);
//};

function log() {
console.log('hello');
}

return MyModule;
})();

var module1 = new MyModule();

module1.alert(); // Alerts 'something'
module1.log(); // Logs 'hello'

要真正理解 JavaScript,请忘记类,了解一般的原型(prototype)和函数,特别是闭包。

观看此brilliant conference by Douglas Crockford让它正确。

关于javascript - iife 返回的函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38426457/

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