标签: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();得到结果:
本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1954778
标签:typescript 类
原文地址:http://aonaufly.blog.51cto.com/3554853/1954778