参数列表中的私有变量

时间:2013-07-20 10:29:16

标签: javascript

我有以下函数声明:

function Linker(linked_class, word_class, colors_count) {
    var _linked_class = linked_class;

    this.say = function() {
        alert(_linked_class);
    }
}

我想在函数中使用_linked_class作为私有变量。我的问题是我是否需要在函数内部创建_linked_class变量并分配通过参数列表传递的linked_class变量的值,或者我可以使用通过参数传递的变量作为私有变量而不声明?如下所示:

function Linker(_linked_class, word_class, colors_count) {
    this.say = function() {
        alert(_linked_class);
    }
}

2 个答案:

答案 0 :(得分:0)

我想是的,你可以双管齐下。由于javascript在创建函数时保持函数上下文。所以在你的第二个例子中,_linked_class将是有效的值,每当"说"叫做。

答案 1 :(得分:0)

JavaScript中有两种流行的“隐私”方式。一个是通过闭包 - 构造函数参数属于构造函数闭包。在这种情况下,这些变量和函数将无法从函数外部访问。

另一种方法是将它们视为常规变量/方法。一开始的下划线不是语言机制,而是程序员用来表示隐私的惯例。例如:

function Linker(linked_class, word_class, colors_count) {
    this.say = function() {
        alert(linked_class);
        // if you want to access a "conventionally private", 
        // (or any other method from the same class), 
        // you can do it like this:
        this._whisper();
    }
    this._whisper = function() {
        alert(linked_class);
    }
    this._pseudoPrivateVariable = 5;
}

下划线不常见。