2.0.17 • Published 4 years ago
frank-native-core v2.0.17
frank-native-core
Usage
Redesign the management about JavaScript prototype chain inheritance,Make every instance has independent prototype chain. In other words:make inheritance like Java.
Orignal oop code:
function Parent(){
var data;
this.getData = functin(){
return data;
};
this.setData(arg){
data = arg;
};
};
function Child(){};
Child.prototype = new Parent();
var b = new Child();
var c = new Child();
b.setData("b");
c.setData("c");
console.log("b:"+b.getData());//"b:c", incorrect
console.log("c:"+c.getData());//"c:c", correct
Now oop code
const Frank = require("require");
const Parent = Frank.buildType("Parent").classBody(function(){
var data;
this.getData = functin(){
return data;
};
this.setData(arg){
data = arg;
};
}).toClass();
const Child = Frank.buildType("Child").extendsFrom(Parent).toClass();
var b = Frank.newInstance(Child);//or Child.newInstance() or new Child();
var c = Frank.newInstance(Child);//or Child.newInstance() or new Child();
b.setData("b");
c.setData("c");
console.log("b:"+b.getData());//"b:b" correct
console.log("c:"+c.getData());//"c:c" correct
Developing
const Frank = require("frank-native-core");
const SuperClass = function () {};
const Person = Frank.buildType("Person").extendsFrom(SuperClass).classBody(function () {
this.name = Frank.FrankUtils.getter_setter();
this.age = Frank.FrankUtils.getter_setter();
this.job = Frank.FrankUtils.abstract4override;
this.say = function () {
return "I am a " + this.job() + ", " + this.name() + " , " + this.age() + " year-old.";
};
}).toClass();
const Student = Frank.buildType("Student").extendsFrom(Person).classBody(function () {
this.job = function () {
return "student";
}
}).toClass();
const Teacher = Frank.buildType("Teacher").extendsFrom(Person).classBody(function () {
this.job = function () {
return "teacher";
}
}).toClass();
var student = Frank.newInstance(Student);
var teacher = Frank.newInstance(Teacher);
student.name("Tom").age(20);
teacher.name("Lili").age(30);
console.log("student.isInstance( SuperClass) : " + student.isInstance(SuperClass);
console.log("student.isInstance( Person) : " + student.isInstance(Person);
console.log("student.isInstance( Student) : " + student.isInstance(Student);
console.log("Student.isAssignableFrom( Person) : " + Student.isAssignableFrom(Person);
console.log("Student.isAssignableFrom(Student) : " + Student.isAssignableFrom(Student);
console.log("teacher.isInstance( SuperClass) : " + teacher.isInstance(SuperClass);
console.log("teacher.isInstance( Person) : " + teacher.isInstance(Person);
console.log("teacher.isInstance( Teacher) : " + teacher.isInstance(Teacher);
console.log("Teacher.isAssignableFrom( Person) : " + Teacher.isAssignableFrom(Person);
console.log("Teacher.isAssignableFrom(Teacher) : " + Teacher.isAssignableFrom(Teacher);
console.log("teacher.isInstance( Student) : " + teacher.isInstance(Student);
console.log("teacher.isInstance( Object) : " + teacher.isInstance(Object);
console.log(student.say());
console.log(teacher.say());
output logs:
student.isInstance( SuperClass) : true
student.isInstance( Person) : true
student.isInstance( Student) : true
Student.isAssignableFrom( Person) : true
Student.isAssignableFrom(Student) : false
teacher.isInstance( SuperClass) : true
teacher.isInstance( Person) : true
teacher.isInstance( Teacher) : true
Teacher.isAssignableFrom( Person) : true
Teacher.isAssignableFrom(Teacher) : false
teacher.isInstance( Student) : false
teacher.isInstance( Object) : true
I am a student, Tom , 20 year-old.
I am a teacher, Lili , 30 year-old.
API
- Type: Frank.buildType(className:string)
- Type: Frank.FrancFactory.buildType(className:string)
- Type: Type.extendsFrom(clazz:Function/Class/Constructor)
- Type: Type.classBody(func:Function/Class/Constructor)
- Class: Type.toClass()
- FrankBasic: Class.newInstance()
- FrankBasic: Frank.newInstance(Class)
- Boolean: Class.isAssignableFrom(clazz:Function/Class/Constructor)
- Boolean: FrankBasic.isInstance(clazz:Function/Class/Constructor)
- FrankBasic.superApply(methodName,arguments)
Tools
Created with Nodeclipse (Eclipse Marketplace, site)
Nodeclipse is free open-source project that grows with your contributions.
2.0.17
4 years ago
2.0.16
5 years ago
2.0.15
5 years ago
2.0.14
5 years ago
2.0.13
5 years ago
2.0.12
5 years ago
2.0.11
5 years ago
2.0.10
5 years ago
2.0.9
5 years ago
2.0.8
5 years ago
2.0.7
5 years ago
2.0.6
5 years ago
2.0.5
5 years ago
2.0.4
6 years ago
2.0.3
6 years ago
2.0.2
6 years ago
2.0.1
6 years ago
2.0.0
6 years ago
1.0.3
6 years ago
1.0.2
6 years ago
1.0.1
6 years ago
1.0.0
6 years ago