gpt4 book ai didi

javascript - 当我将 IIFE 分配给变量时,IIFE 如何工作?

转载 作者:行者123 更新时间:2023-11-29 17:50:43 29 4
gpt4 key购买 nike

我对 javascript 中的以下代码感到困惑。

var x=(function(){
var customObject = function(){};

customObject.prototype.sayHello=function(){
alert("hello");
};

return customObject;
})();

//var y=new x();// If I uncomment this line and comment the next line "var
//y=x;" the code works
var y=x;
y.sayHello();

此代码不会打招呼,但会在我删除评论时打招呼。我读到 IIFE 在定义后立即执行。因此,它应该直接将 customObject 分配给 x。

我的问题是为什么我需要创建一个新的 x 实例来打招呼。我不清楚 IIFE 在这里是如何工作的。

请帮助我理解这个概念。先感谢您 :-) 。

最佳答案

您是正确的,customObject 已分配给 x。但是 customObject(因此 x)没有 sayHello 属性。它有一个 prototype 属性,that 有一个 sayHello 属性。

当您执行 y=x 然后执行 y.sayHello() 时,您正在尝试调用 customObject.sayHello,这不会'存在。

当您执行 y=new x() 时,您创建了一个对象,其原型(prototype)是 customObject.prototype 对象。然后,当您调用 y.sayHello() 时,sayHello 函数会通过原型(prototype)链找到。

这与您使用 IIFE 并没有真正的关系。如果你只是写,你会得到相同的结果:

var x = function() {}
x.prototype.sayHello = function() {
alert("hello");
}

而不是 IIFE。

关于javascript - 当我将 IIFE 分配给变量时,IIFE 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093658/

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