【发布时间】:2016-12-10 19:26:32
【问题描述】:
我正在讨论关于强类型和静态类型语言的基本论点。另一位辩论者是纯粹的 javascript 爱好者。虽然我喜欢同时使用 c# 和 javascript。对话源于关于 TypeScript 的讨论以及它如何比纯 js 更好,因为它是强类型的。 (已经主观了)。因此,我向他提供了一个论点,即 TypeScript 在尝试使用以下示例时已经失败了。
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("world");
var greetWorld = greeter.greet;
alert(greetWorld()); //undefined, unexpected for strongly typed languages
我已经说过这在 JS 中是预期的。事实上,我喜欢这个。这就是为什么它作为一种动态类型语言如此强大的原因。但是,'this' 关键字只不过是 JS 中的一个属性,为什么 TypeScript 只是一个额外的层,增加了混乱并使它变得更好。
“当一个函数被创建时,一个名为 this 的关键字被创建(在幕后),它链接到函数运行的对象。”(JS)。
那么这实际上只是函数/对象的一个属性。强类型的定义:“每种类型的数据(例如整数、字符、十六进制、压缩十进制等)都被预定义为编程语言的一部分,并且为给定程序定义的所有常量或变量都必须用一个来描述的数据类型。”所以数据类型函数/对象是分开的,数据类型的关键字“ONE”。
我似乎无法将争论带回家。事实上,我什至可能是错的。不过对我来说,上面的问题是一个运行时类型错误,它们不是greeting,即使如果“this”关键字真正绑定在编程语言中,也是可以预料的。
我错过了什么吗?
【问题讨论】:
-
我不知道你是否遗漏了什么,但我担心我错过了你的意思。问题是什么?不过,我可以告诉你一件事:如果有人一直无法理解你告诉他的内容,那么至少你们中的一个人要么是智障,要么不愿意听。这意味着是时候减少你的损失,握手,做一些功课,以确保你不是智障。
-
我认为仅仅因为 TypeScript 不能复制强类型语言的所有行为,就说它“不比 JavaScript 更好”是不公平的。
标签: javascript c# strong-typing