https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Classes.md
我正在尝试学习TypeScript。 Classes中的第一个例子:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
这似乎很简单,但是当我记录欢迎时:console.log(greeter);
而不是得到" Hello World"我得到了#Gree; {问候:"世界"}"
我的设置: package.json :(只是TypeScript;没有其他库)
{
"name": "typescript learning",
"version": "1.0.0",
"scripts": {
"start": "concurrently \"npm run tsc:w\" \"npm run lite\" ",
"tsc": "tsc",
"tsc:w": "tsc -w",
"lite": "lite-server"
},
"license": "ISC",
"dependencies": {
"concurrently": "^2.0.0",
"lite-server": "^2.1.0",
"typescript": "^1.8.0"
}
}
和tsconfig.json只是默认值:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts",
"typescript.notes.ts"
]
}
那么,我错过了一些基本的东西吗?或者这只是一个不应该被评估的不完整的例子?显然,我对TypeScript来说还是一个新手,并没有任何背景可以从他们的面值中汲取实例。非常感谢任何投入, -Mike
答案 0 :(得分:1)
你的问题是:
let greeter = new Greeter("world");
console.log(greeter);
这只显示了类实例本身,并没有在类上实际调用方法。
所以你想要的是:
let greeter = new Greeter("world");
console.log(greeter.greet());
还要在评论中回答您的问题:
一个简单的问题,即使方法问候是课程的一部分,它也不会通过调用类进行评估?我知道情况就是如此,但不是我所期待的。我试图在我的脑海中设法使用该类而不是单独的函数。
从本质上讲,一个类基本上只是一个逻辑上属于"的方法和变量的集合。因某种原因在一起。
例如,如果我有一个类Car
,它可能包含变量fuel
以及方法drive()
和refuel()
。调用drive()
和refuel()
方法会改变变量fuel
。这样,您可以轻松地创建一个类的一个,两个或一百个实例,并且仍然可以轻松跟踪内容。 如果没有面向对象的编程,所有这些都会更加难以跟踪,特别是当你开始创建多辆汽车时。
显然,您不想在创建新车时立即启动drive()
!代码中有constructor
方法,每次创建类时, 都会自动运行。这对于初始化一些东西通常很有用,但实际上只不过是以下内容的快捷方式:
let greeter = new Greeter();
greeter.set_message("world")
除非您忘记使用它;-)构造函数通常用于类应该始终具有的变量,例如示例中的字符串,或者在我们的Car示例中,设置燃料到一些初始水平。因此,名称需要构建类。
在现实世界中#34;大多数类都更抽象,并且有一些功能允许你做更多(如继承),但基本思想是相同的:如果方法和变量在逻辑上属于同一个&#34,则类是一个集合;东西"或"对象" - 我觉得有些指南会让它变得比它需要的复杂得多,因为他们马上就想从一开始就引入继承等概念而不完全解释类的基本目的。
如果您刚开始时并不完全理解所有内容,请不要担心。我想很少有人这样做。我当然没有。几乎每个人一开始都在努力解决这样的问题。
答案 1 :(得分:0)
greeter
是一个对象。因此,调用console.log(greeter);
正在记录greeting
属性设置为world
的实际对象。
您想要记录greeter.greet()
以查看" Hello,world。"