What is a best practice for ensuring “this” context in Javascript?

后端 未结 8 1428
刺人心
刺人心 2021-02-14 20:37

Here\'s a sample of a simple Javascript class with a public and private method (fiddle: http://jsfiddle.net/gY4mh/).

function Example() {
    function privateFun         


        
相关标签:
8条回答
  • 2021-02-14 21:06

    Another approach is to use "apply" to explicitly set what the methods "this" should be bound to.

    function Test() {
        this.name = 'test';
        this.logName = function() {
            console.log(this.name);
        }
    }
    
    var foo = {name: 'foo'};
    
    var test = new Test();
    test.logName()
    // => test
    test.logName.apply(foo, null);
    // => foo
    

    Yet another approach is to use "call":

    function Test() {
        this.name = 'test';
        this.logName = function() {
            console.log(this.name);
        }
    }
    
    var foo = {name: 'foo'};
    
    var test = new Test();
    test.logName()
    // => test
    test.logName.call(foo, null);
    // => foo
    

    both "apply" and "call" take the object that you want to bind "this" to as the first argument and an array of arguments to pass in to the method you are calling as the second arg.

    0 讨论(0)
  • 2021-02-14 21:10

    I would say assigning self to this is a common technique:

    function Example() {
        var self = this;
    
        function privateFunction() {
            console.log(self);
        }
    
        self.publicFunction = function() {
            privateFunction();
        };
    }
    

    Using apply (as others have suggested) also works, though it's a bit more complex in my opinion.

    It might be beyond the scope of this question, but I would also recommend considering a different approach to JavaScript where you actually don't use the this keyword at all. A former colleague of mine at ThoughtWorks, Pete Hodgson, wrote a really helpful article, Class-less JavaScript, explaining one way to do this.

    0 讨论(0)
提交回复
热议问题