【问题标题】:Javascript Naming Convention: value() vs getValue() [closed]Javascript 命名约定:value() 与 getValue() [关闭]
【发布时间】:2014-07-16 18:40:34
【问题描述】:

想象一个简单的对象:

function createObj(someValue) {
    return {
        someFunction: function () {
            return someValue;
        }
    };
};

基本上是这样的:

var obj = createObj("something");
var result = obj.someFunction(); // "something"

现在,someFunction 指的是一个返回值的函数。 javascript 中为someFunction 函数使用的正确命名约定应该是什么? 它应该被命名为它的作用吗?或者可以用它返回的对象的名称来命名它?

我的意思是,我应该将其命名为 value(),还是应该命名为 getValue()?为什么?

提前致谢。

【问题讨论】:

  • 我觉得你在问一个基于意见的问题,这意味着它应该被标记和关闭,但作为一个注释:要么遵循公司惯例,要么遵循你容易理解的格式。 getValue 很简单,除非你想重载 value 以便在没有要设置的参数时得到...
  • getValue() 是一个糟糕的名称,因为它没有描述函数的作用,因为几乎每个函数都会获得一个值。它应该更像 getBalance() 或 getUser()
  • 名称 value 只是举例,当然我不会为每个函数都使用该名称。如果它返回一头牛,它可能是cow()getCow()
  • 在 SO 问答游戏化的推动下,元巨魔再次关闭了一个非常好的问题。当然有“意见”。我想阅读这样一个问题的答案有很好的、正当的理由。最重要的是,找出人们认为的“最佳实践”。基于这样的智慧,一个人的代码可以得到很大的改进。

标签: javascript naming-conventions


【解决方案1】:

JavaScript 中没有“正确”的命名。但是,主要使用三种约定:

独立的getter和setter:

在这种方法中,我们创建了一个 getter 和一个 setter 函数,就像在 Java 中一样:

var value;

this.getValue = function () {
    return value;
}

this.setValue(val) {
    value = val;
}

组合的getter/setter方法

在这种方法中,您有一个方法可以同时进行这两种操作。这里的神奇之处在于它会检查您是否为您的属性提供了新值:

var _value;

this.value = function (val) {
    if (arguments.length > 0) {
        // Acts like a setter
        _value = value;
        return this;
    }
    return _value;
}

定义 setter 以返回类的实际实例也很常见,因此您可以这样做:

myObj
     .setProp1("foo")
     .setProp2("bar");

Object.defineProperty

​​>

这个用的比较少,但也是一种选择。类似于Objective-C的@property声明:

var _value;
Object.defineProperty(this, "value", {
    get: function() {
        return _value;
    },
    set: function(val) { 
        _value = val;
    }
});

然后你可以像访问公共属性一样访问它:

console.log(myObj.value);  // Calls the getter method
myObj.value = newValue;    // Calls the setter method

【讨论】:

    【解决方案2】:

    一般命名约定说getValue() 是函数的名称,而value 是变量的名称。

    因此,如果您直接访问数据,您将使用obj.value,而如果您使用函数获取一些数据,您将使用obj.getValue()

    【讨论】:

    • 那里有大量生产 JavaScript 代码,包括许多库中的代码,它们强烈反对(例如,参见 jQuery)。不代表它是正确,但这确实是见仁见智。
    【解决方案3】:

    特别是 Javascript 有很多命名约定。

    这个问题有一个姐妹,希望这对你的问题有所帮助:Clicky for more info

    【讨论】:

      【解决方案4】:

      我个人是 getValue 和 setValue 的粉丝,但是在阅读其他人的代码库时,我已经看到了

      object.value = function(item){
        if (!item) return this.value;
        this.value = item;
      }
      

      jQuery 经常使用它,这就是为什么我不想对它进行抨击。

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 2011-10-03
        • 1970-01-01
        • 2012-12-25
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 2011-10-21
        相关资源
        最近更新 更多