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