TypeScript 类

从ECMAScript 6开始,JS就支持类了.但是如果使用TypeScript也能使用类,并且生成的JS任然可以使用.



来一个例子:

/**
 * Created by CV-PC153 on 2017/8/9.
 */
//创建一个类
class Greeter{
    private greeting : string;
    constructor(message : string){
        this.greeting = message;
    }
    public greet():string{
        return `Hello, ${this.greeting}`;
    }
}
//实例化Greeter类
let my_greeter : Greeter = new Greeter("World");
document.body.innerHTML = my_greeter.greet();

用此生成的JS:

/**
 * Created by CV-PC153 on 2017/8/9.
 */
//锟斤拷锟斤拷一锟斤拷锟斤拷
var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
}());
//实锟斤拷锟斤拷Greeter锟斤拷
var my_greeter = new Greeter("World");
document.body.innerHTML = my_greeter.greet();

运行得到的结果:

继承:::

/**
 * Created by CV-PC153 on 2017/8/9.
 */
class Monster{
    protected name : string;
    constructor( name : string ){
        this.name = name;
    }
    public attack() : string{
        return `${this.name} attack`;
    }
}
//哥斯拉
class Godzilla extends Monster{
    constructor(){
        super("gesila");
    }
    public attack():string{
        console.log(`${this.name} launched an attack use fire`);
        return super.attack();
    }
}
//美杜莎
class Medusa extends Monster{
    constructor(){
        super("meidusha");
    }
    public attack():string{
        console.log(`${this.name} launched an attack use eyes`);
        return super.attack();
    }
}

let gsl : Monster = new Godzilla();
document.body.innerHTML = gsl.attack();

值得注意的是,重写基类方法,没有override关键字.

生成的JS比较复杂,如下:

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
/**
 * Created by CV-PC153 on 2017/8/9.
 */
var Monster = (function () {
    function Monster(name) {
        this.name = name;
    }
    Monster.prototype.attack = function () {
        return this.name + " attack";
    };
    return Monster;
}());
//锟斤拷斯锟斤拷
var Godzilla = (function (_super) {
    __extends(Godzilla, _super);
    function Godzilla() {
        return _super.call(this, "gesila") || this;
    }
    Godzilla.prototype.attack = function () {
        console.log(this.name + " launched an attack use fire");
        return _super.prototype.attack.call(this);
    };
    return Godzilla;
}(Monster));
//锟斤拷锟斤拷莎
var Medusa = (function (_super) {
    __extends(Medusa, _super);
    function Medusa() {
        return _super.call(this, "meidusha") || this;
    }
    Medusa.prototype.attack = function () {
        console.log(this.name + " launched an attack use eyes");
        return _super.prototype.attack.call(this);
    };
    return Medusa;
}(Monster));
var gsl = new Godzilla();
document.body.innerHTML = gsl.attack();

结果如下:

关于 , 参数属性 (可以与定义参数融为一体)

代码如下:

constructor( protected name : string) {}

存储器: getter / setter

get _name():string{
    return this.name;
}
set _name( value : string ){
    this.name = value;
}

和AS3很像

但是编译的时候一定要注意

不然就会如下编译错误:

抽象类:

/**
 * Created by CV-PC153 on 2017/8/9.
 */
abstract class Monster{
    constructor( protected name : string) {}
    public abstract attack() : string;

    get _name():string{
        return this.name;
    }
    set _name( value : string ){
        this.name = value;
    }
}
//哥斯拉
class Godzilla extends Monster{

    constructor(){
        super("gesila");
    }
    public attack():string{
        return `${this.name} launched an attack use fire`;
    }
}
//美杜莎
class Medusa extends Monster{
    constructor(){
        super("meidusha");
    }
    public attack():string{
        return `${this.name} launched an attack use eyes`;
    }
}

let gsl : Monster = new Godzilla();
document.body.innerHTML = gsl.attack();

得到结果:

时间: 2024-11-05 11:43:07

TypeScript 类的相关文章

.NET手撸绘制TypeScript类图——上篇

.NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化,TypeScript越来越流行,前端的设计也越来复杂,而类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方式.许多工具都能生成C#类图,有些工具也能生成TypeScript类图,如tsuml,但存在一些局限性. 我们都是.NET开发,为啥不干脆就用.NET撸一个TypeScript类图呢? 说干就干!为了搞到类图,一共分两步走: 解析.ts文件,生成抽象语法树(AST),并转换为简单的类.属性.方法等对象

4、TypeScript 类

介绍 TypeScript 是面向对象的 JavaScript. 类描述了所创建的对象共同的属性和方法. TypeScript 支持面向对象的所有特性,比如 类.接口等. 定义类的关键字为 class,后面紧跟类名,类可以包含以下几个模块(类的数据成员): 字段 ? 字段是类里面声明的变量.字段表示对象的有关数据. 构造函数 ? 类实例化时调用,可以为类的对象分配内存. 方法 ? 方法为对象要执行的操作. 实例代码 class Car { // 字段 engine:string; // 构造函数

TypeScript——类

ES6之后JS将能够使用基于类的面向对象的方式,TS中的类覆盖了JS中的类 基本实现 “类的成员属性”都是实例属性,而不是原型属性,“类的成员方法”都是“原型”方法 class Dog { constructor(name: string) { this.name = name; } name: string // 需要增加成员类型注释 run() {} } console.log(Dog.prototype) // { run: f, constructor: f } 继承与ES不同的是:实例

Angular2 和TypeScript

Angular2 和TypeScript 原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者:  Yakov Fain Posted on  Apr 26, 2016 -----------------------------------------------------------------------------------------------------------------

[译]Angular2 和TypeScript -- 一次简要的预览

原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者:  Yakov Fain Posted on  Apr 26, 2016 ------------------------------------------------------------------------------------------------------------------------------ Angular

转载 《我用 TypeScript 语言的七个月》

快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/ 百度网盘同步:http://pan.baidu.com/s/1jG1Q58M 分享  [中文纪录片]互联网时代   http://pan.baidu.com/s/1qWkJfcS 官方QQ群:(申请加入,说是我推荐的) App实践出真知 4

TypeScript入门五:TypeScript的接口

TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的基本使用 1.1定义TypeScript接口的指令(interface) 接口让我们想到的第一个短语就是(API).比如日常我们所说的调用某某程序的API一般都是跨应用的接口,如别的网站的或者APP的接口:还有我们每天都是用的编程语言的指令和内置的方法及属性,这些可以叫做编程语言的接口:还有令我们既

TypeScript最大的目的是让程序员更具创造性

TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准. TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上. 以上为网上对 Typescript 的一些解释,那我们为什么要学 Typescript? 提到前端我们首先会想到 HTML,CSS,JavaScript 三大家族,我们掌握这三个就可以在前端界获得一

[web建站] 极客WEB大前端专家级开发工程师培训视频教程

极客WEB大前端专家级开发工程师培训视频教程  教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5与HTML4的区别2.HTML5新增的主体结构元素3.HTML5新增的的非主体结构元素 4.HTML5表单新增元素与属性5.HTML5表单新增元素与属性(续)6.HTML5改良的input元素的种类 7.HTML5增强的页面元素8.HTML5编辑API之Range对象(一)9.HTML5编辑API之