Javascript 构造函数与 Typescript 类

标签 javascript

我最近开始学习 Javascript,并试图理解一些重要的概念。根据我目前的理解,Javascript 没有类,它使用构造函数而不是类来创建对象的蓝图。示例:

// javascript code
var Car = function() {
  // this is a private variable
  var speed = 10;

  // these are public methods
  this.accelerate = function(change) {
    speed += change;
  };

  this.decelerate = function() {
    speed -= 5;
  };

  this.getSpeed = function() {
    return speed;
  };
};    
// typescript code
class Car {

  public speed: number = 10;

  public acceleration(accelerationNumber: number): void {
    this.speed += accelerationNumber;
  }

  public decelerate(decelerateNumber: number): void {
    this.speed += decelerateNumber;
  }

  public getSpeed(): number {
    return this.speed;
  }
}

上面的 Typescript 代码更有意义,因为我们有一个为该类对象创建蓝图的类。但是,在 Javascript 中,这个蓝图是通过一个函数创建的。那么这是否意味着 Javascript 中的构造函数与 Typescript/Java/等中的类所做的事情相同?

最佳答案

该 Typescript 类的正确等效项是:

var Car = function () {
  this.speed = 10;
};

Car.prototype.accelerate = function (change) {
  this.speed += change;
};

Car.prototype.decelerate = function () {
  this.speed -= 5;
};

Car.prototype.getSpeed = function () {
  return this.speed;
};

Car 函数,即构造函数,基本上就是 class 中的 constructor() ;这是初始化新实例时执行的操作。 prototype 上的所有函数都是在所有实例共享的类中定义的其他方法。

关于Javascript 构造函数与 Typescript 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759770/

相关文章:

javascript - 在 Canvas 中变换以在移动时将 Sprite 保持在正确的位置

javascript - jQuery.validate 和按类验证

javascript - 在不使用 lodash get 的情况下从 json 中提取深层属性

javascript - NAV Javascript AddIn 方法无法正常工作 : Method 'Page90005. PageName58a58aUpdateSignature 未找到

javascript - jqGrid 在页面加载时选择第一行

javascript - 用户如何获取两个时间戳之间的对象

javascript - 以功能评估为条件抢占 promise

javascript - browser.pause() 和 browser.enterRepl() 有什么区别?

javascript - 通过单击切换一次显示一个文本

c# - JavaScript 中的 HTML 助手?