【第8篇】TypeScript的Mixin案例代码详解

9.1Mixin使用

Ts代码


/**

* Mixin使用.

*

*随着传统的面向对象的层次结构,从可重用的组件建立类的另一种流行的方式是通过简单的组合部分类来构建他们。

*你可能熟悉混入或性状比如Scala语言的理念,模式也达到了JavaScript的一些社区人气

*/

// Disposable Mixin(一次性)

class Disposable {

isDisposed: boolean;

dispose() {

this.isDisposed = true;

}

}

// Activatable Mixin(激活混入)

class Activatable {

isActive: boolean;

activate() {

this.isActive = true;

}

deactivate() {

this.isActive = false;

}

}

//SmartObject类实现Disposable与Activatable类

class SmartObject implements Disposable, Activatable {

constructor() {

setInterval(() => console.log(this.isActive + " : " + this.isDisposed), 500);

}

//相互作用

interact() {

this.activate();

}

// Disposable

isDisposed: boolean = false;

dispose: () => void;

// Activatable

isActive: boolean = false;

activate: () => void;

deactivate: () => void;

}

applyMixins(SmartObject, [Disposable, Activatable])

var smartObj = new SmartObject();

setTimeout(() => smartObj.interact(), 1000);

////////////////////////////////////////

// In your runtime library somewhere

//在您的运行时库的地方

////////////////////////////////////////

function applyMixins(derivedCtor: any, baseCtors: any[]) {

baseCtors.forEach(baseCtor => {

Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {

derivedCtor.prototype[name] = baseCtor.prototype[name];

})

});

}

Js代码


/**

* Mixin使用.

*

*随着传统的面向对象的层次结构,从可重用的组件建立类的另一种流行的方式是通过简单的组合部分类来构建他们。

*你可能熟悉混入或性状比如Scala语言的理念,模式也达到了JavaScript的一些社区人气

*/

// Disposable Mixin(一次性)

var Disposable = (function () {

function Disposable() {

}

Disposable.prototype.dispose = function () {

this.isDisposed = true;

};

return Disposable;

})();

// Activatable Mixin(激活混入)

var Activatable = (function () {

function Activatable() {

}

Activatable.prototype.activate = function () {

this.isActive = true;

};

Activatable.prototype.deactivate = function () {

this.isActive = false;

};

return Activatable;

})();

//SmartObject类实现Disposable与Activatable类

var SmartObject = (function () {

function SmartObject() {

var _this = this;

// Disposable

this.isDisposed = false;

// Activatable

this.isActive = false;

setInterval(function () { return console.log(_this.isActive + " : " + _this.isDisposed); }, 500);

}

//相互作用

SmartObject.prototype.interact = function () {

this.activate();

};

return SmartObject;

})();

applyMixins(SmartObject, [Disposable, Activatable]);

var smartObj = new SmartObject();

setTimeout(function () { return smartObj.interact(); }, 1000);

////////////////////////////////////////

// In your runtime library somewhere

//在您的运行时库的地方

////////////////////////////////////////

function applyMixins(derivedCtor, baseCtors) {

baseCtors.forEach(function (baseCtor) {

Object.getOwnPropertyNames(baseCtor.prototype).forEach(function (name) {

derivedCtor.prototype[name] = baseCtor.prototype[name];

});

});

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 13:36:01

【第8篇】TypeScript的Mixin案例代码详解的相关文章

【第7篇】TypeScript泛型的案例代码详解

8.1最简单泛型例子 Ts代码 /** * 没有泛型,我们要么必须给身份功能的特定类型 */ function identity1(arg: number): number { return arg; } /** * 或者:我们可以描述使用"任意"类型的标识功能: */ function identity2(arg: any): any { return arg; } Js文件 /** * 没有泛型,我们要么必须给身份功能的特定类型 */ function identity1(arg)

【第6篇】TypeScript函数function的案例代码详解

7.1最简单function函数 Ts代码 /*******声明一个add方法********/ function add(x: number, y: number): number { return x+y; } /*******声明一个myAdd1方法********/ var myAdd1 = function(x: number, y: number): number { return x+y; }; /*******声明一个myAdd2方法********/ //现在我们已经输入的功能

jQuery选择器代码详解(五)——实例说明tokenize的解析过程

原创文章,转载请写明出处,多谢! 以下分析基于jQuery-1.10.2.js版本. 下面将以$("div:not(.class:contain('span')):eq(3)")为例,说明tokenize和preFilter各段代码是如何协调完成解析的.若想了解tokenize方法和preFilter类的每行代码的详细解释,请参看如下两篇文章: jQuery选择器代码详解(三)--tokenize方法 jQuery选择器代码详解(四)--Expr.preFilter 下面是tokeni

Akka第一个案例动手实战main方法实现中ActorSystem等代码详解

学习了Akka第一个案例动手实战main方法实现中ActorSystem等代码详解,创建ActorSystem实例,用acterOf创建MasterActor,用tell的方式给MasterActor发信息,睡眠一段时间给MasterActor发信息,处理完后关闭,资源回收. 案例如下: public static void main(String[] args) throws Exception{ ActorSystem_system =  ActorSystem.create("HelloA

tiny_cnn代码详解(3)——层间继承关系

在上一篇博文中我们顺利将tiny_cnn的程序调试通过,在这篇博文中我们尝试从整体角度给出对tiny_cnn这个深度学习框架的解读,重点论述一下其各个层直接类封装的继承关系. 一.卷积神经网络快速入门 tiny_cnn作为卷积神经网络的一种实现形式,在探讨其框架结构之前,首先需要简要介绍一些卷积神经网络相关的知识.首先,给出经典卷积神经网络的网络结构: 这个是经典的LeNet-5的网络结构图,五层网络.最早用于支票上的手写数字识别,也是最早的商业化的深度学习模型.从上图中可以看出,卷积神经网络主

Github-jcjohnson/torch-rnn代码详解

Github-jcjohnson/torch-rnn代码详解 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-3-18 声明: 1)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 2)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 请联系:[email protected] 或[email protected] 本研

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43225445 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Convolutional Neural Networks (LeNet).经详细注释的代码和原始代码:放在我的github地址上,可下载. 一.CNN卷积神经网络原理