base-class-extend
Advanced tools
Comparing version 0.0.9 to 0.0.10
@@ -62,11 +62,9 @@ // base-class.js | ||
var superCtor = this; | ||
if (typeof superCtor !== 'function') | ||
superCtor = Object; | ||
if (!proto || typeof proto !== 'object') proto = {}; | ||
var superCtor = typeof this === 'function' ? this : Object; | ||
if (!proto) proto = {}; | ||
var ctor = proto.hasOwnProperty('new') && proto.new || | ||
proto.hasOwnProperty('constructor') && proto.constructor || | ||
Function('proto, superCtor, BaseClass_new', | ||
var ctor = proto.hasOwnProperty('constructor') ? proto.constructor : | ||
proto.hasOwnProperty('ctor') ? proto.ctor : | ||
proto.hasOwnProperty('new') ? proto.new : | ||
Function('proto, superCtor, BaseClass_create', | ||
'return function ' + name + '() {\n' + | ||
@@ -77,6 +75,6 @@ ' "use strict";' + | ||
' this instanceof Error && !this.hasOwnProperty("message"))\n' + | ||
' return BaseClass_new.apply(proto.constructor, arguments);\n' + | ||
' return BaseClass_create.apply(proto.constructor, arguments);\n' + | ||
' if (superCtor !== Object && superCtor !== Array && superCtor !== Error)\n' + | ||
' superCtor.apply(this, arguments); }') | ||
(proto, superCtor, BaseClass_new); | ||
(proto, superCtor, BaseClass_create); | ||
if (typeof ctor !== 'function') | ||
@@ -86,3 +84,3 @@ throw new TypeError('constructor must be a function'); | ||
ctor.prototype = proto; | ||
ctor = Function('proto, ctor, BaseClass_new', | ||
ctor = Function('proto, ctor, BaseClass_create', | ||
'return function ' + name + '() {\n' + | ||
@@ -93,13 +91,12 @@ ' "use strict";' + | ||
' this instanceof Error && !this.hasOwnProperty("message"))\n' + | ||
' return BaseClass_new.apply(proto.constructor, arguments);\n' + | ||
' return BaseClass_create.apply(proto.constructor, arguments);\n' + | ||
' ctor.apply(this, arguments); }') | ||
(proto, ctor, BaseClass_new); | ||
(proto, ctor, BaseClass_create); | ||
} | ||
ctor.prototype = proto; | ||
// override constructor and new | ||
delete proto.constructor; | ||
// override constructor | ||
delete proto.ctor; | ||
delete proto.new; | ||
setValue(proto, 'constructor', ctor); | ||
setValue(proto, 'new', ctor); | ||
@@ -117,7 +114,2 @@ // inherits from super constructor | ||
// class initializer: initialize | ||
var init = classProps.hasOwnProperty('initialize') && classProps.initialize; | ||
delete classProps.initialize; | ||
if (typeof init === 'function') init.call(ctor); | ||
// class initializer: init | ||
@@ -143,4 +135,5 @@ var init = classProps.hasOwnProperty('init') && classProps.init; | ||
// add methods and class methods if not found (in prototype chain) | ||
if (!('extend' in ctor)) ctor.extend = BaseClass_extend; | ||
if (!('new' in ctor)) ctor.new = BaseClass_new; | ||
if (ctor.extend !== BaseClass_extend) ctor.extend = BaseClass_extend; | ||
if (ctor.create !== BaseClass_create) ctor.create = BaseClass_create; | ||
if (ctor.new !== BaseClass_create) ctor.new = BaseClass_create; | ||
@@ -164,4 +157,4 @@ if (!('constructors' in ctor)) | ||
// BaseClass.new | ||
function BaseClass_new() { | ||
// BaseClass.new or BaseClass.create | ||
function BaseClass_create() { | ||
//assert(this === this.prototype.constructor, | ||
@@ -180,3 +173,3 @@ // 'prototype of class/constructor is not class/constructor'); | ||
obj.stack = obj.stack.split('\n').filter(function (str) { | ||
return !/((base-class.js)|(BaseClass_new))/.test(str); | ||
return !/((base-class.js)|(BaseClass_create))/.test(str); | ||
}).join('\n'); | ||
@@ -216,3 +209,4 @@ setProto(obj, this.prototype); | ||
{extend: BaseClass_extend, | ||
new: BaseClass_new, | ||
create: BaseClass_create, | ||
new: BaseClass_create, | ||
get constructors() { | ||
@@ -219,0 +213,0 @@ var ctors = [], ctor = this; |
{ | ||
"name": "base-class-extend", | ||
"version": "0.0.9", | ||
"version": "0.0.10", | ||
"description": "Base Class constructor for easy class definition - supports getter/setter, inherit/extend Array Error or EventEmitter etc", | ||
@@ -5,0 +5,0 @@ "main": "lib/base-class.js", |
@@ -18,2 +18,4 @@ [base-class-extend](https://www.npmjs.org/package/base-class-extend) - npm | ||
関連記事: [[JavaScript] getter/setterも使えるエコ楽なクラス定義 - もちろん継承も - private変数も](http://qiita.com/LightSpeedC/items/3946088b58925234cc48) - qiita | ||
 | ||
@@ -27,2 +29,10 @@ | ||
または | ||
http://lightspeedworks.github.io/base-class/lib/base-class.js | ||
```html | ||
<script src="http://lightspeedworks.github.io/base-class/lib/base-class.js"></script> | ||
``` | ||
# 使い方: | ||
@@ -50,8 +60,10 @@ | ||
+ **proto**: 新しいクラスのプロトタイプオブジェクト (省略可) | ||
+ **new**または**constructor**: コンストラクタ関数 (省略可) | ||
+ **get** getterまたは**set** setter: getter/setter (省略可) | ||
+ **new**, **ctor** または **constructor**: コンストラクタ関数 (省略可) | ||
+ **get** prop(): getter関数 (省略可) | ||
+ **set** prop(value): setter関数 (省略可) | ||
+ **any methods**: メソッドまたはメンバー関数 (省略可) | ||
+ **classProps**: クラス/静的プロパティのオブジェクト (省略可) | ||
+ **init**または**initialize**: 初期化関数 (省略可) | ||
+ **get** getterまたは**set** setter: getter/setter, (省略可) | ||
+ **init**: 初期化関数 (省略可) | ||
+ **get** prop(): getter関数 (省略可) | ||
+ **set** prop(value): setter関数 (省略可) | ||
+ **any methods**: 静的メソッドまたはクラス関数 (省略可) | ||
@@ -95,3 +107,3 @@ | ||
## メソッド: Class.new(...) | ||
## メソッド: Class.new(...) または Class.create(...) | ||
@@ -107,2 +119,5 @@ クラスのインスタンスオブジェクトを作成する。 | ||
// または | ||
var yourObj = YourClass.create(); | ||
// または | ||
var yourObj = new YourClass(); | ||
@@ -205,3 +220,4 @@ | ||
+ **proto**: プライベート変数にアクセスできるメソッドが含まれるプロトタイプオブジェクト (必須) | ||
+ **get** getterまたは**set** setter: getter/setter (省略可) | ||
+ **get** prop(): getter関数 (省略可) | ||
+ **set** prop(value): setter関数 (省略可) | ||
+ **any methods**: メソッドまたはメンバー関数 (省略可) | ||
@@ -208,0 +224,0 @@ |
@@ -27,2 +27,10 @@ [base-class-extend](https://www.npmjs.org/package/base-class-extend) - npm | ||
or | ||
http://lightspeedworks.github.io/base-class/lib/base-class.js | ||
```html | ||
<script src="http://lightspeedworks.github.io/base-class/lib/base-class.js"></script> | ||
``` | ||
# USAGE: | ||
@@ -50,8 +58,10 @@ | ||
+ **proto**: the prototype object for your class, optional | ||
+ **new** or **constructor**: constructor function, optional | ||
+ **get** getter or **set** setter: getter/setter, optional | ||
+ **new**, **ctor** or **constructor**: constructor function, optional | ||
+ **get** prop(): getter function, optional | ||
+ **set** prop(value): setter function, optional | ||
+ **any methods**: any method or member function, optional | ||
+ **classProps**: the object for class or static properties, optional | ||
+ **init** or **initialize**: initialize function, optional | ||
+ **get** getter or **set** setter: getter/setter, optional | ||
+ **init**: initialize function, optional | ||
+ **get** prop(): getter function, optional | ||
+ **set** prop(value): setter function, optional | ||
+ **any methods**: any static method or class function, optional | ||
@@ -95,3 +105,3 @@ | ||
## method: Class.new(...) | ||
## method: Class.new(...) or Class.create(...) | ||
@@ -107,2 +117,5 @@ Create an object, instance of the Class. | ||
// or | ||
var yourObj = YourClass.create(); | ||
// or | ||
var yourObj = new YourClass(); | ||
@@ -205,3 +218,4 @@ | ||
+ **proto**: the prototype object contains methods accessing private variables, required | ||
+ **get** getter or **set** setter: getter/setter, optional | ||
+ **get** prop(): getter function, optional | ||
+ **set** prop(value): setter function, optional | ||
+ **any methods**: any method or member function, optional | ||
@@ -208,0 +222,0 @@ |
@@ -74,3 +74,3 @@ // animal-test.js | ||
}); // -> Dog class init. (Dog) | ||
var d1 = Dog.new('Hachi'); // Class method new call | ||
var d1 = Dog.create('Hachi'); // Class method new call | ||
d1.introduce(); // -> My name is Hachi. I am a Dog. | ||
@@ -77,0 +77,0 @@ Dog.dogClassMethod(); // -> Animal class method. (Animal), Dog class method. (Dog) |
@@ -20,2 +20,3 @@ // function-test.js | ||
var b3 = BaseClass(); | ||
var b4 = BaseClass.create(); | ||
@@ -30,2 +31,3 @@ // Prepare | ||
var o3 = CustomObject(); | ||
var o4 = CustomObject.create(); | ||
@@ -37,2 +39,3 @@ // CustomArray | ||
var a3 = CustomArray(1, 2, 3); | ||
var a4 = CustomArray.create(1, 2, 3); | ||
@@ -44,5 +47,7 @@ // CustomError | ||
var e3 = CustomError('message3'); | ||
var e4 = CustomError.create('message4'); | ||
console.log('%s %s', e1, e1.message); //, e1.stack); | ||
console.log('%s %s', e2, e2.message); //, e2.stack); | ||
console.log('%s %s', e3, e3.message); //, e3.stack); | ||
console.log('%s %s', e4, e4.message); //, e4.stack); | ||
@@ -56,14 +61,17 @@ var EventEmitter = require('events').EventEmitter; | ||
var ee3 = CustomEventEmitter(); | ||
var ee4 = CustomEventEmitter.create(); | ||
ee1.on('test', function () { console.log('ee1.test'); }); | ||
ee2.on('test', function () { console.log('ee2.test'); }); | ||
ee3.on('test', function () { console.log('ee3.test'); }); | ||
ee4.on('test', function () { console.log('ee4.test'); }); | ||
ee1.emit('test'); | ||
ee2.emit('test'); | ||
ee3.emit('test'); | ||
ee4.emit('test'); | ||
checkConstructor(BaseClass, Object, b1, b2, b3); | ||
checkConstructor(CustomObject, Object, o1, o2, o3); | ||
checkConstructor(CustomArray, Array, a1, a2, a3); | ||
checkConstructor(CustomError, Error, e1, e2, e3); | ||
checkConstructor(CustomEventEmitter, EventEmitter, ee1, ee2, ee3); | ||
checkConstructor(BaseClass, Object, b1, b2, b3, b4); | ||
checkConstructor(CustomObject, Object, o1, o2, o3, o4); | ||
checkConstructor(CustomArray, Array, a1, a2, a3, a4); | ||
checkConstructor(CustomError, Error, e1, e2, e3, e4); | ||
checkConstructor(CustomEventEmitter, EventEmitter, ee1, ee2, ee3, ee4); | ||
@@ -70,0 +78,0 @@ function checkConstructor(ctor, superCtor) { |
@@ -15,2 +15,3 @@ // object-test.js | ||
var b3 = BaseClass(); | ||
var b4 = BaseClass.create(); | ||
@@ -26,2 +27,3 @@ // Prepare | ||
var s03 = SimpleClass0(); | ||
var s04 = SimpleClass0.create(); | ||
@@ -34,2 +36,3 @@ // SimpleClass1 | ||
var s13 = SimpleClass1(); | ||
var s14 = SimpleClass1.create(); | ||
@@ -45,7 +48,8 @@ // Prepare for Object | ||
var s23 = SimpleClass2(); | ||
var s24 = SimpleClass2.create(); | ||
checkConstructor(BaseClass, b1, b2, b3); | ||
checkConstructor(SimpleClass0, s01, s02, s03); | ||
checkConstructor(SimpleClass1, s11, s12, s13); | ||
checkConstructor(SimpleClass2, s21, s22, s23); | ||
checkConstructor(BaseClass, b1, b2, b3, b4); | ||
checkConstructor(SimpleClass0, s01, s02, s03, s04); | ||
checkConstructor(SimpleClass1, s11, s12, s13, s14); | ||
checkConstructor(SimpleClass2, s21, s22, s23, s24); | ||
@@ -52,0 +56,0 @@ function checkConstructor(ctor) { |
@@ -30,2 +30,3 @@ // private-test.js | ||
var p3 = PrivateClass1(13); | ||
var p4 = PrivateClass1.create(14); | ||
p1.showPrivate(); | ||
@@ -40,4 +41,7 @@ console.log('p1.private1 = ' + p1.private1); | ||
console.log('p3.private2 = ' + p3.private2); | ||
p4.showPrivate(); | ||
console.log('p4.private1 = ' + p4.private1); | ||
console.log('p4.private2 = ' + p4.private2); | ||
checkConstructor(PrivateClass1, p1, p2, p3); | ||
checkConstructor(PrivateClass1, p1, p2, p3, p4); | ||
@@ -60,2 +64,3 @@ function checkConstructor(ctor) { | ||
console.log(p3.constructors.map(mapName).join(' < ')); | ||
console.log(p4.constructors.map(mapName).join(' < ')); | ||
console.log(PrivateClass1.constructors.map(mapName).join(' < ')); |
@@ -32,3 +32,3 @@ // quick.js | ||
myObj.value++; // 6 -> 7 throws Error | ||
} catch (e) { console.log(e.stack || (e + '')); } | ||
} catch (e) { console.log(e + ''); } | ||
@@ -35,0 +35,0 @@ console.log(); |
Sorry, the diff of this file is not supported yet
451067
23
817
425