-1

我有以下函数声明:

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);
    }
}
4

2 回答 2

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;
}

下划线在闭包中并不常见。

于 2013-07-20T10:41:37.383 回答
0

我认为是的,你可以双向进行。由于 javascript 在创建函数时保留函数上下文。因此,在您的第二个示例中,每当调用“say”时,_linked_class 将是有效值。

于 2013-07-20T10:32:55.987 回答