用JavaScript定义一个类?

用JavaScript定义一个类?,javascript,typescript,Javascript,Typescript,我在学习一个教程,他们使用翻译器将Typescript中的类翻译成javascript。翻译后的javascript有点混乱,我想知道是否有人可以向我解释代码在做什么 原始打字稿: class Greeter { greeting: string; constructor(message: string){ this.greeting; } greet(){ return "Hello, " + this.greeting;

我在学习一个教程,他们使用翻译器将Typescript中的类翻译成javascript。翻译后的javascript有点混乱,我想知道是否有人可以向我解释代码在做什么

原始打字稿:

class Greeter {
    greeting: string;
    constructor(message: string){
        this.greeting;
    }
    greet(){
        return "Hello, " + this.greeting;
    }
}
翻译后的Javascript:

var Greeter = (function(){
    function Greeter(message){
        this.greeting = message;
    }
    Greeter.prototype.greet = function(){
        return "Hello, " + this.greeting;
    };
    return Greeter;
}());
我对这部分(function(){…}())感到困惑

第一个()在做什么?为什么函数(){}是必需的?下面的()在做什么

语法相当混乱,我希望有人能解释一下

我对这部分(function(){…}())感到困惑

浏览器对该函数进行解释后,将立即执行该函数。您不必显式调用此函数

Greeter.prototype.greet = function(){
    return "Hello, " + this.greeting;
};
第一个()在做什么?为什么函数(){}是必需的

javascript中的所有函数本质上都是对象。要创建它的实例,您必须像调用
new Greeter()
那样调用,以便正确设置上下文
this
。如果像
Greeter()
那样执行,那么上下文
这个
就是从它执行的地方开始的。在大多数情况下,它是
窗口
对象

参考文章

我对这部分(function(){…}())感到困惑

浏览器对该函数进行解释后,将立即执行该函数。您不必显式调用此函数

Greeter.prototype.greet = function(){
    return "Hello, " + this.greeting;
};
第一个()在做什么?为什么函数(){}是必需的

javascript中的所有函数本质上都是对象。要创建它的实例,您必须像调用
new Greeter()
那样调用,以便正确设置上下文
this
。如果像
Greeter()
那样执行,那么上下文
这个
就是从它执行的地方开始的。在大多数情况下,它是
窗口
对象

参考文章

此结构:

const foo = (function() { })();
创建一个匿名函数,并立即调用它。结果进入
foo

可以使用一个额外变量将其拆分为更多行:

const temp = function() { };
const foo = temp();
typescript之所以这样做,是因为在函数中放置代码会创建自己的新范围。这使得在不更改全局名称空间的情况下执行某些操作成为可能。

此构造:

const foo = (function() { })();
创建一个匿名函数,并立即调用它。结果进入
foo

可以使用一个额外变量将其拆分为更多行:

const temp = function() { };
const foo = temp();
typescript之所以这样做,是因为在函数中放置代码会创建自己的新范围。这使得在不更改全局名称空间的情况下执行某些操作成为可能。

这就是所谓的

一般语法:

(function () {
    statements
})();
但有时,你可以写:

(function () {
    statements
}());
我通常使用第二个,因为它遵循以下步骤:

  • 定义函数:
    function(){/*语句*/}

  • 调用函数:
    function(){/*语句*/}()

  • 并包装函数:(
    function(){/*statements*/}())

或者将其用作异步线程:

(async function () {
    // await some task...
})();

(async () => {
    // await some task...
})();
您还可以使用它定义一些局部变量,如下所示:

let Person=(函数(){
设_name=null;
班主任{
建造师(姓名){
_名称=名称;
}
getName(){
返回_name;
}
}
返回人;
}());
let person=新人(“哈里”);
console.log(person.getName());
控制台日志(窗口名称)被称为

一般语法:

(function () {
    statements
})();
但有时,你可以写:

(function () {
    statements
}());
我通常使用第二个,因为它遵循以下步骤:

  • 定义函数:
    function(){/*语句*/}

  • 调用函数:
    function(){/*语句*/}()

  • 并包装函数:(
    function(){/*statements*/}())

或者将其用作异步线程:

(async function () {
    // await some task...
})();

(async () => {
    // await some task...
})();
您还可以使用它定义一些局部变量,如下所示:

let Person=(函数(){
设_name=null;
班主任{
建造师(姓名){
_名称=名称;
}
getName(){
返回_name;
}
}
返回人;
}());
let person=新人(“哈里”);
console.log(person.getName());
控制台日志(窗口名称)
(函数(){…}())
是一种

例如:

var Greeter = (function(){
    return 1;
}());
结果等于

function fn() {
    return 1;
}
var Greeter = fn();
执行上述代码后,
Greeter
的值为
1
。但前者使用匿名函数,后者声明变量
fn
来存储函数

Greeter.prototype.greet = function(){
    return "Hello, " + this.greeting;
};
此代码段用于在对象
Greeter
的原型上定义一个函数,以便在创建
新Greeter()
时可以继承此函数。您可以参考

(function(){…}())
是一种

例如:

var Greeter = (function(){
    return 1;
}());
结果等于

function fn() {
    return 1;
}
var Greeter = fn();
执行上述代码后,
Greeter
的值为
1
。但前者使用匿名函数,后者声明变量
fn
来存储函数

Greeter.prototype.greet = function(){
    return "Hello, " + this.greeting;
};
此代码段用于在对象
Greeter
的原型上定义一个函数,以便在创建
新Greeter()
时可以继承此函数。您可以参考

这是一个it是一个