Whats the difference between using 'this' and the object name for reference inside the object?

前端 未结 3 1141
情深已故
情深已故 2021-01-06 10:15

If I have the following code:

var obj = {

    x: 34,

    init: function() {
        alert(this.x);
        alert(obj.x)
    }

};

Both al

3条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-06 10:46

    Besides the shadowing and so on mentioned in the previous answers, using this is more generic and thus will work more effectively in certain scenarios. Let me illustrate.

    var object = {
        name: 'John Doe',
        print: function () {
            console.log(object.name);
        }
    };
    
    var anotherObject = Object.create(object);
    
    object.print(); // John Doe
    anotherObject.print(); // John Doe
    
    anotherObject.name = 'Jane Doe';
    console.log(anotherObject.name); // Jane Doe
    anotherObject.print(); // John Doe
    

    What I'm doing here is that I'm creating an object that has a name 'John Doe' and then I create anotherObject that inherits from it. Now in this scenario, you would expect anotherObject.print() to print its own name. But it doesn't.

    This is because your function is tied to that particular object. If I would have used this instead, it would have referred to the new object appropriately.

    Also, imagine what happens if I were to do this.

    delete object.name;
    anotherObject.print() // Error!
    

    http://jsfiddle.net/uxy08zxz/

    This is because even though you think it has nothing to do with that previous object, its function still refers to that very property. Doesn't it?

    Hence, keep it generic. Use this. Keeps your code drier, I say.

提交回复
热议问题