gpt4 book ai didi

javascript - 为什么将 JavaScript 类嵌入到匿名 function() 调用中?

转载 作者:可可西里 更新时间:2023-11-01 01:17:56 24 4
gpt4 key购买 nike

我正在阅读来自 Microsoft 的新的类似 JavaScript 的语言,称为 TypeScript .在playground (example section) ,有一个简单的 TypeScript 语法类转换为 JavaScript 代码。我有 Java 编程背景,了解如何在从 TypeScript 编译的 JavaScript 中完成 OOP 对我来说很有趣。

TypeScript 代码:

class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}

var greeter = new Greeter("world");

var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
alert(greeter.greet())
}

document.body.appendChild(button)

以及等效的 JavaScript 代码:

var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
var greeter = new Greeter("world");
var button = document.createElement('button');
button.innerText = "Say Hello";
button.onclick = function () {
alert(greeter.greet());
};
document.body.appendChild(button);

Typescript 部分与 Java 非常相似,所以我理解这一点。现在我的问题是,为什么在 JavaScript 中 Greeter 类的主体嵌入到匿名的 function() 调用中?

为什么不这样写呢?

function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};

每种方法的优点/缺点是什么?

最佳答案

以下称为立即调用的函数表达式:

(function(){ ... })();

它用于保持全局范围的清洁。不过,在这种情况下没有必要,因为返回值已分配给变量 Greeter。只有当您需要“私有(private)”静态 成员时,此模式才有用。

例如:

var Greeter = (function () {
var foo = 'foo', bar = 'bar'; /* only accessible from function's defined
in the local scope ... */

function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();

关于javascript - 为什么将 JavaScript 类嵌入到匿名 function() 调用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692250/

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