/** * author Redcrow * 17/1/2012 */ var student = new Student(); var reflections = student.getReflections(); console.log(reflections.getClassName()); console.log(reflections.getPrivateAttributes()); console.log(reflections.getPublicAttributes()); console.log(reflections.getAttributes()); console.log(reflections.getPrivateMethods()); console.log(reflections.getPublicMethods()); console.log(reflections.getMethods()); //
Reflection.js
/**
* author Redcrow
* 17/1/2012
*/
function Reflection(object){
object = object || {};
var reflect = distinguish(object);
this.getClassName = function(){
return reflect.className;
}
this.getPrivateAttributes = function(){
return reflect.attributes.privateScope;
}
this.getPublicAttributes = function(){
return reflect.attributes.publicScope;
}
this.getPrivateMethods = function(){
return reflect.methods.privateScope;
}
this.getPublicMethods = function(){
return reflect.methods.publicScope;
}
this.getAttributes = function(){
return reflect.attributes.all;
}
this.getMethods = function(){
return reflect.methods.all;
}
function distinguish(object){
var reflect = {
className : "",
attributes : {
privateScope : [],
publicScope : [],
all : []
},
methods : {
privateScope : [],
publicScope : [],
all : []
}
}
reflect.className = object.publicScope.constructor.name;
pusher('privateScope');
pusher('publicScope');
concatArray('attributes');
concatArray('methods');
function pusher(scope){
for(i in object[scope]){
if(typeof object[scope][i] !== 'function'){
reflect.attributes[scope].push(i);
}else{
reflect.methods[scope].push(i);
}
}
}
function concatArray(type){
reflect[type].all = reflect[type].privateScope.concat(reflect[type].publicScope);
}
return reflect;
}
}
Student.js
/**
* author Redcrow
* 17/1/2012
*/
function Student(){
this.locale = "";
var privateScope = {
name : "",
major : "",
faculty : "",
reset : function(){
}
}
this.getName = function(){
return privateScope.name;
}
this.setName = function(name){
privateScope.name = name;
return this;
}
this.getMajor = function(){
return privateScope.major;
}
this.setMajor = function(major){
privateScope.major = major;
return this;
}
this.getFaculty = function(){
return privateScope.faculty;
}
this.setFaculty = function(faculty){
privateScope.faculty = faculty;
return this;
}
this.getReflections = function(){
return reflections;
}
var reflections = new Reflection({
publicScope : this,
privateScope : privateScope
});
}

ไม่มีความคิดเห็น:
แสดงความคิดเห็น