• Stars
    star
    102
  • Rank 335,584 (Top 7 %)
  • Language
    JavaScript
  • Created over 12 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Class Utility

Class


spm package Build Status Coverage Status

提供简洁的 OO 实现。


使用说明

create Class.create([parent], [properties])

创建一个新类。参数 parent 是继承的父类,properties 是要混入的实例属性。

来看一个简单的例子(线上演示):

/* pig.js */
define(function(require, exports, module) {
    var Class = require('class');

    var Pig = Class.create({
        initialize: function(name) {
            this.name = name;
        },

        talk: function() {
            alert('我是' + this.name);
        }
    });

    module.exports = Pig;
});

initialize 属性,标明初始化方法,会在构建实例时调用。

使用 create 方法创建的类,拥有 extend 方法,可以继续创建子类:

/* red-pig.js */
define(function(require, exports, module) {
    var Pig = require('./pig');

    var RedPig = Pig.extend({
        initialize: function(name) {
            RedPig.superclass.initialize.call(this, name);
        },

        color: '红色'
    });

    module.exports = RedPig;
});

注意:需要在子类方法中,调用父类中的同名方法时,JavaScript 语言自身并没有提供类似 super 的方式来轻松实现。用 createextend 方法创建类时,可以使用 superclass.methodName 来显式调用父类方法。之所以不提供 super 方法,原因有二:

  1. 实现起来较麻烦。现有类库的实现方案,都不完美。
  2. 在 JavaScript 编程中,调用 super 的需求并不多。简单通过 superclass.methodName 来调用已经能够满足需求,并很灵活、清晰。

properties 参数中,除了支持用 initialize 来标明初始化方法,还可以用 Implements 来标明所创建的类需要从哪些类中混入属性:

/* flyable.js */
define(function(require, exports, module) {
    exports.fly = function() {
        alert('我飞起来了');
    };
});
/* flyable-red-pig.js */
define(function(require, exports, module) {
    var RedPig = require('./red-pig');
    var Flyable = require('./flyable');

    var FlyableRedPig = RedPig.extend({
        Implements: Flyable,

        initialize: function(name) {
            FlyableRedPig.superclass.initialize.call(this, name);
        }
    });

    module.exports = FlyableRedPig;
});

注意Implements 采用首字母大写,是因为小写的 implements 是 JavaScript 保留字。大写也表示其特殊性,与 MooTools 的方式一致。

除了 Implements, 还有一个特殊属性:

  • Extends - 用来指定继承的父类,注意只能有一个父类,不支持多继承。

implement SomeClass.implement(properties)

该方法与 Implements 属性的功能类似。当某个类已存在,需要动态修改时,用 implement 方法更便捷。

/* flyable-red-pig-extension.js */
define(function(require, exports, module) {
    var FlyableRedPig = require('./flyable-red-pig');

    FlyableRedPig.implement({
       swim: function() {
           alert('我还会游泳');
       }
    });
});

这样,我们得到了会说话、会飞、还会游泳的飞天红猪侠:

/* test.js */
define(function(require, exports, module) {
    var FlyableRedPig = require('./flyable-red-pig');
    require('./flyable-red-pig-extension');

    var pig = new FlyableRedPig('飞天红猪侠');
    pig.talk(); // alerts '我是飞天红猪侠'
    pig.fly();  // alerts '我飞起来了'
    pig.swim(); // alerts '我还会游泳'
});

extend SomeClass.extend(properties)

Class.create 创建的类,自动具有 extend 方法,功能与 Class.create 完全一样,只是继承的父类是 SomeClass 自身,前面的例子中已说明,不赘述。

Class Class(fn)

将已经存在的 function 函数转换为 Class 类:

function Animal() {
}
Animal.prototype.talk = function() {};

var Dog = Class(Animal).extend({
    swim: function() {}
});

性能对比

More Repositories

1

aralejs.github.io

开放、简单、易用的前端基础类库
JavaScript
1,373
star
2

qrcode

二维码生成模块
JavaScript
590
star
3

upload

iframe and html5 file uploader
JavaScript
85
star
4

name-storage

Storage via window.name
JavaScript
64
star
5

dialog

Dialog Widget
JavaScript
60
star
6

widget

The Base Class of Widget
JavaScript
53
star
7

validator

Form Validator Widget
JavaScript
41
star
8

base

Base Class
JavaScript
39
star
9

autocomplete

自动补全组件
JavaScript
37
star
10

nico-arale

Replaced by https://github.com/spmjs/nico-cmd
CSS
35
star
11

switchable

Switchable Widget
JavaScript
34
star
12

events

Events Utility
JavaScript
34
star
13

position

Position Utility
JavaScript
32
star
14

calendar

Calendar Widget
JavaScript
32
star
15

sticky

实现元素跟随滚动的效果
JavaScript
20
star
16

cookie

Cookie Utility
JavaScript
19
star
17

dnd

Drag and Drop
JavaScript
17
star
18

messenger

A common iframe communication solution.
JavaScript
15
star
19

overlay

基础浮层组件。
JavaScript
15
star
20

popup

可触发的浮层组件。
JavaScript
14
star
21

tip

基础提示框组件
JavaScript
14
star
22

select

Select Widget
JavaScript
11
star
23

templatable

处理组件的模板渲染,混入到 Widget 中使用。
JavaScript
9
star
24

easing

Easing Utility
JavaScript
8
star
25

template-arale

arale 模块模板项目
JavaScript
7
star
26

iframe-shim

Iframe-Shim Utility
JavaScript
7
star
27

placeholder

replaced by gallery/placeholders
JavaScript
3
star
28

dialog-iframe-helper

Use this helper lib in cross domain iframe with dialog widget
JavaScript
3
star
29

template-alice

alice module template
JavaScript
2
star
30

site

a arale based site template.
JavaScript
1
star