rbrtn
rbrtn

Reputation: 29

Get an object's name as the value of this

I am trying to understand the value of this at different points in a script. Questions similar to mine have been answered in this forum but those answers are considerably above my current learning level.

In my code experiments, I am using console.logs to return the this value. The value returned is always as expected, but the format of the returned value is inconsistent, which leads me to wonder why.

This code returns the expected Window object for the first 3 log commands to be executed but returns only the object literal for the 4th command, executed from the object's method.

var myName = {
    name: "James",
    sayName: function() {
        console.log(this, 4);
        console.log(this.name)
    }
}

console.log(this, 1);  
function myFunction() {
    console.log(this, 2);
    function nestFunction() {
        console.log(this, 3);
        myName.sayName();
    } 
    nestFunction();
}

myFunction();

I have 3 questions: Why doesn't console.log return the name of the object? Is there a way to make it do so? Is there a simple way to do that other than console.log? Any help would be appreciated.

Upvotes: 2

Views: 95

Answers (1)

JonoJames
JonoJames

Reputation: 1223

Ok I was going through your code to see what you specifically mean

here is the short explanation as to why THIS is different in some of the places

This keyword refers to the object it belongs to. Generally you used it to refer to the global window object .That's what is reflecting in your console log 1,2,3 .

Calling this in static javaScript object will return the javaScript object ,not the window object that is what is reflecting in the console.log(this,4).

So it gives you a way to call elements inside a static object . Another way to understand this keyword is to look at constructors .The best example of the keyword

this

is inside a constructor function

    var myObj = function(){

            function myObj(ref)
            {
                    this.name = "";
                    this.Item = "";
                    this.ref = ref;
                    this.speak();
             }

             myObj.prototype.speak =function()
             {
                     this.name = 'James';
                     this.item = 'cheese';

                     console.log(this.ref)
                     //and the constuctor object
                     console.log(this)
             }

             return myObj;
    }();

    var e = new myObj('a Refrence string');

This should give you a basic understanding of how this works

here is more info to get you started Wschools.com

Upvotes: 2

Related Questions