从私有函数访问类成员

时间:2015-10-27 19:58:42

标签: javascript class design-patterns

假设我有一个类,我需要从该类中的私有函数访问一些方法。像这样:

var A = function( )
{
    this.a = 0;

    var f = function( ){   // Private function
        this.a;   // Undefined
    };

    f( );
};

最好的办法是什么?我试图将它传递给函数,但是如果我必须为许多函数执行它,它就不实用了。

var A = function( )
{
    this.a = 0;

    var f = function( self ){
        self.a;
    };

    f( this );
};

有更好的方法吗?或者设计是否存在根本缺陷,我应该考虑其他替代方案?谢谢!

2 个答案:

答案 0 :(得分:1)

为什么是,使用ES6,我们得到箭头功能,自动this绑定!

var A = function() {
    this.a = 0;

    var f = () => {   // Private function
        console.log(this.a);   // Woohoo!
    };

    // If only one statement, can be shortened to
    // var f = () => console.log(this.a);

    f();
};

对于不幸的人:.bind()也存在:

var A = function() {
    this.a = 0;

    var f = function() {   // Private function
        console.log(this.a);   // Woohoo!
    }.bind(this); // this inside the function is bound to the passed this.

    // If only one statement, can be shortened to
    // var f = () => console.log(this.a);

    f();
};

答案 1 :(得分:1)

为了避免这个'混淆我见过的常见模式如下:

var A = function( ) {
    var self = this;
    self.a = 0;

    var f = function( ){   // Private function
        self.a;   // Defined
    };

    f( );
};