Node.js reflection and empty "this" object

55 views
Skip to first unread message

Leo Cono

unread,
Feb 8, 2015, 10:26:34 PM2/8/15
to nod...@googlegroups.com
I am using node.js and "this", as well as, this.global is empty Anybody know why it is empty? Here is the code:

var business_object = require('./user.js');
var node_framework = require('./trace-meldaround.js');
var user = new business_object.User('Leo');
var thisObj = this;
var globalObj = this.global;
var methods = [];

for (var method in thisObj) {
    if (typeof thisObj[method] == 'function') {
        methods.push(method);
    }

    for (var method in globalObj) {
        if (typeof globalObj[method] == 'function') {
            methods.push(method);
        }
    }
}


Ryan Schmidt

unread,
Feb 8, 2015, 10:44:52 PM2/8/15
to nod...@googlegroups.com

On Feb 8, 2015, at 9:26 PM, Leo Cono wrote:

> I am using node.js and "this", as well as, this.global is empty Anybody know why it is empty? Here is the code:
>
> var business_object = require('./user.js');
> var node_framework = require('./trace-meldaround.js');
> var user = new business_object.User('Leo');
> var thisObj = this;
> var globalObj = this.global;

What are you expecting "this" and "this.global" to be at this point? One would not normally use "this" here.

Rick Waldron

unread,
Feb 9, 2015, 9:36:40 AM2/9/15
to nod...@googlegroups.com
`this` inside a module isn't the global object, since all module code is automatically wrapped in an immediately invoked function expression. The global object binding's identifier name is `global`.

Rick
--
Job board: http://jobs.nodejs.org/
New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups "nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscribe@googlegroups.com.
To post to this group, send email to nod...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/A22A7B29-CA5E-4EB9-9F6F-D07BC95E1DE8%40ryandesign.com.
For more options, visit https://groups.google.com/d/optout.

Leo Cono

unread,
Feb 11, 2015, 1:04:57 PM2/11/15
to nod...@googlegroups.com

NodeClipse Eclipse plug-in for Node.js does not work with the embedded V8 Debugger.
Instead I accessed the JavaScript Application module exports to do reflection with Node.js apps since "this" object is empty.
Here is the code:

app.js code:

var business_object = require('./user.js');

var node_framework = require('./trace-meldaround.js');

var user = new business_object.User('Leo');


var trace = new node_framework.Trace('Hello Meld App');

trace.doTrace();

user.sayHello();

user.sayGoodBye();


user.js code:

var User = function(name){
    this.name = name;
    };

    User.prototype.sayHello = function(){
        console.log('hello ' + this.name);
    };

    User.prototype.sayGoodBye = function(){
        console.log('Good Bye ' + this.name);
    };

    exports.User = User;

 

trace-meldaround.js Code:
var meld, joinPoint;


meld = require('./meld.js');
joinPoint = meld.joinpoint;

var log4js = require('./node_framework/log4js-node-master/lib/log4js'); // include log4js

log4js.configure({ // configure to use all types in different files.
    appenders: [
        {   type: 'file',
            filename: '../logs/error.log', // specify the path where u want logs folder error.log
            category: 'error',
            maxLogSize: 20480,
            backups: 10
        },
        {   type: 'file',
            filename: '../logs/info.log', // specify the path where u want logs folder info.log
            category: 'info',
            maxLogSize: 20480,
            backups: 10
        },
        {   type: 'file',
            filename: '../logs/debug.log', // specify the path where u want logs folder debug.log
            category: 'debug',
            maxLogSize: 20480,
            backups: 10
        }
    ]
});

var loggerinfo = log4js.getLogger('info'); // initialize the var to use.
var loggererror = log4js.getLogger('error'); // initialize the var to use.
var loggerdebug = log4js.getLogger('debug'); // initialize the var to use.

var Trace = function(AppName){
    this.appName = AppName;
    };


    Trace.prototype.doTrace = function(){
   
        function sayMeld(jp) {           
            console.log('meldaround function called for Application : ' + Trace.constructor.AppName);

            console.log('JoinPoint Method: ' +  jp.method);
            console.log('JoinPoint Target: ' + jp.target);
            console.log('JoinPoint Args: ' + jp.args.toString());
            console.log('JoinPoint Result: ' + jp.result);
            console.log('JoinPoint Exception: ' + jp.exception);
            loggerinfo.info('Calling Method: ' + jp.method);
            loggererror.info('This is Error Logger');
            loggerdebug.info('JoinPoint Method: ' +  jp.method);
            loggerdebug.info('JoinPoint Target: ' + jp.target);
            loggerdebug.info('JoinPoint Args: ' + jp.args.toString());
            loggerdebug.info('JoinPoint Result: ' + jp.result);
            loggerdebug.info('JoinPoint Exception: ' + jp.exception);           
        }
       
       
        var appObjects = module.parent.children;       
        var methods = [];
        var objects = [];

        for (var i=0; i<appObjects.length;i++){   
            if (typeof appObjects[i] == 'object'){
                    objects.push(appObjects[i]);
                   
                    var funcObj = appObjects[i].exports;
                    if (typeof funcObj == 'object')
                    {
                        for (var key in funcObj){
                            var k =0;
                            var prototypeObj = funcObj[key].prototype;
                            methods[i] = [];
                            for (var proto in prototypeObj){                                                                                                
                                 methods[i][k] = proto;
                                 k++;
                            }                                                                               
                        }
                    }                   
                }
        }

       
        for (var j=0; j<objects.length; j++){
            var ObjectName;
            for (var key2 in objects[j].exports){               
                ObjectName = key2;
                console.log(objects[j].exports[ObjectName].prototype);
               
                for (var n=0; n<methods[j].length; n++){
                    if (ObjectName != 'Trace'){
                    meld.around(objects[j].exports[ObjectName].prototype, methods[j][n], function(joinPoint){
                        sayMeld(joinPoint);
                       
                        joinPoint.proceed();
                    });   
                    }
                }

            }                       
    }
       
    };

    exports.Trace = Trace;

Reply all
Reply to author
Forward
0 new messages