1

在javascript中,我喜欢。,

0.目前的命名方式:

Cell = function(position){
   //Constructor.
   var pos = position;


   //Many Sub-functions using variable `pos` here through out this function Cell.
}

但是在 java/C++ 中,我可以写一样的东西。,

   Cell(int pos){
    this.pos = pos; 
   }

建议的命名方式:

1.关于this.pos = pos
这里在javascript中我也可以这样做this.pos = pos,它会起作用。但问题是,然后在整个程序中,我必须以 . 的身份访问我的位置this.pos,并且在分配时很危险,因为当我分配喜欢this.Pos = 7(错误的情况)时,它不会显示错误。所以这种方法是不可取的。

2.关于pos = _pos

Cell = function(_pos){
       //Constructor.
       var pos = _pos;

但一般来说,在 C++/Java 中我不会使用这种方式,所以最好这不是我最好的方式。

3.通过函数使用构造函数的参数作为变量。

Cell = function(pos){

我可以通过我的功能使用这个 pos,但我怀疑我是否可以这样做。因为,我需要以适当的面向原型的方式使用构造函数、setter、getter 等来执行此操作……此外,在John resign 链接中,他使用valueval两个不同的名称。

在这个链接中,我看到了 Java 构造函数和简单设置器中参数命名的最佳实践,参数命名 没有约定。

我个人的偏好是1,但我会被迫使用,this.pos也有风险。

那么,是 1 还是 2 还是 3 还是 0(我目前的方式)。哪一个是最好的?

4

1 回答 1

0

老实说,我只是去寻找this.pos = pos;并依靠文档来知道它是一个不应该被访问的私有成员。我还看到有些人_为此目的使用前缀,例如this._pos = pos;. 将所有实例变量设为“私有”的问题在于,您正在牺牲原型继承的所有好处,因为您的函数必须在构造函数中声明才能在这些变量上创建闭包。这意味着函数不会通过 实例在实例之间共享prototype,而是每次都作为直接实例成员重新创建。

将所有成员公开并不会阻止您创建和使用设置器,但您需要依赖标准而不是强制执行隐私。

function Cell(pos) {
    this.setPos(pos);
}

Cell.prototype.setPos = function (pos) {
    if (typeof pos !== 'number') {
         throw 'pos has to be a number';
    }

    this.pos = pos;
};

让我们与执行进行比较:

function Cell(pos) {
    //note that we use value to avoid shadowing the closed-over pos variable
    this.setPos = function (value) {
        if (typeof pos !== 'number') {
             throw 'pos has to be a number';
        }

        pos = value;
    };

    this.getPos = function () {
        return pos;
    };

    this.setPos(pos);
}

虽然这可以确保无法绕过访问器,但在我看来,它会导致代码丑陋且效率非常低。但是,在一些有效的情况下可以使用类似的方法,例如在编写模块或单例时。

于 2013-07-30T19:44:25.057 回答