this can be confusing - simple

by afrievalt

JavaScript

var testForThis = function(isThis, message) {
    //this can be confusing
    if(this === isThis) 
        console.log("this is " + message);
    else
        console.log("this is NOT " + message);    
};  

//functional invocation
testForThis(this, "global"); //this is global

var anObject = {
    test: testForThis, //I am a method
    testWithHelper: function(isThis, message) {
        //functional invocation
        testForThis(isThis, message + " from helper");
    }
};

//method invocation
anObject.test(anObject, "anObject"); //this is anObject
//method invocation followed by functional invocation
anObject.testWithHelper(anObject, "an object"); //this is NOT anObject from helper
//method invocation followed by functional invocation
anObject.testWithHelper(this, "global"); //this is global from helper