oo-class

1.4.4 • Public • Published

Class.js v1.4.4Build Status

oop javascript

特性

  • 和原生创建的类是一致的,实例化的对象不包含额外任何成员和添加剂

      var a = new A();
      for(var k in a){
      	console.log(k);  //没有多余的成员
      }
    
  • 创建的类实例化时支持可以不使用new关键字实例化

      var a = new A();
      var a = A();         //可以省略new
    
  • 使用的继承方式保证原型链和对象检测,尽量靠近原生继承和实例化机制

      sub instanceof SuperClass //true 可以用instanceof检测
    
      var A = $Class.create({
      	__:function(){
      		return {};        //实例化A时返回{}而不是实例,和原生一致
      	}
      });
    
  • 提供创建单例类的接口,单例类区别于单例对象{}, 需要实例化且可以继承

      var S = $Class.singleton({
      	foo:function(){
      		console.log('foo');
      	}
      });
      var s1 = new S();
      var s2 = new S();  // s1 === s2
    

API

Class.js统一的访问命名是$Class, 当你使用此库时,应该$Class.xxx(...)来调用API

1.创建一个类

	$Class.create( classMemberObject );

classMemberObject定义类的成员,其中属性__(双下划线)约定为构造方法。

如:

	var A = $Class.create({
		__:function(){
			console.log('A构造方法');
		}
	});

这里实例化的A类的成员是不包含任何污染的,var a = new A();可以用for in遍历检测一下a的所有成员。

2.创建一个子类

	$Class.inherit( SuperClass, subClassMemberObject);

SuperClass为父类,subClassMemberObject是定义子类的成员,其中属性__(双下划线)约定为构造方法。

如:

	var B = $Class.inherit(A, {
		__:function(){
			console.log('B构造方法');
		}
	});

或者使用父类提供的$extend方法:

	SuperClass.$extend( subClassMemberObject )

subClassMemberObject是定义子类的成员,其中属性__(双下划线)约定为构造方法。

如:

	var B = A.$extend({
		__:function(name){
			this.name = name;
			console.log('B构造方法');
		}
	});

这里创建好的B类,是可以用 instanceof 去检测的 (new B()) instanceof A //true

3.拓展原型成员

通常使用 A.prototype.xxx = foo;方式拓展。 这里提供了混入的方式:

	$Class.include(Class, prototype)

如:

	$Class.include(A, {
		xxx:foo		
	});

4.实例化某个类

实例化类通常可以用new关键字, 这里提供了new方法,效果和new是一样的。

	$Class['new']( Class, [argsArray] );

Class为类,argsArray为参数(数组)

如:

	$Class['new'](B, ['tangobot']);  //等同于 new B('tangobot');

5.单例类

创建一个单例类

	$Class.singleton( [classMemberObject] )

classMemberObject是定义子类的成员,其中属性__(双下划线)约定为构造方法。

如:

	var S = $Class.singleton({foo:"foo"});
	var s1 = new S();
	var s2 = new S();
	s1 === s2;  // true
	console.log(s1.foo) //"foo"

6.成员检测

	$Class.member( Class );

返回某个类的原型链上所有定义的成员名称(数组) 如:

	var C = $Class.create({
		foo:'ccc',
	});
	var D = C.$extend({
		bar:'ddd'
	});
	$Class.member(D);   //['bar', 'foo']

7.Base基类

	$Class.Base;

所有create出来的类都是继承自内置的基类$Class.Base, $Class.Base继承于系统环境中的Object。

如:

	var Foo = $Class.create();  
	//继承关系为	 Foo <= $Class.Base <= Object

这里可以重写或者拓展 $Class.Base 来达到拓展Foo类的目的, 你也可以删除$Class.Base 或者 $Class.Base = null 这样就可以改变继承为 Foo <= Object

8.全局配置

	$Class.config( [configObject|configName] )

配置项及默认值:

    constructorName:'__',       //构造方法约定名称,默认约定为双下划线__
	autoSuperConstructor:false, //当子类被实例化时是否先执行父类构造函数 设置后仅对后面声明的类有效
	notUseNew:true,             //是否可以不使用关键字new 直接调用方法实例化对象 如:A()
	useExtend:true,             //是否使用让类拥有拓展继承的方法 如:B = A.$extend({})
	useSuper:true,              //是否让类有$super属性访问父类成员 如:B.$super.foo()
	disguise:false,             //是否让代码生成的构造函数伪装成定义的__:function(){}
	useConstructor:true  		//是否使用B.$constructor来保存定义的__构造函数,这里create inherit生成的构造函数是不等于__的

配置后,仅对后面的生成的类才会产生效果。

如:

$Class.config({notUseNew:false}); //设置后,必须用new实例化对象

Package Sidebar

Install

npm i oo-class

Weekly Downloads

1

Version

1.4.4

License

MIT

Last publish

Collaborators

  • tangoboy