Javascript 命名约定:value() 与 getValue()

lan*_*nte 2 javascript naming-conventions

想象一个简单的对象:

function createObj(someValue) {
    return {
        someFunction: function () {
            return someValue;
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

它基本上是:

var obj = createObj("something");
var result = obj.someFunction(); // "something"
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢。

Dan*_*nte 5

JavaScript 中没有“正确”的命名。然而,最常用的是三种约定:

独立的 getter 和 setter:

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

var value;

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

this.setValue(val) {
    value = val;
}
Run Code Online (Sandbox Code Playgroud)

组合的 getter/setter 方法

在这种方法中,您可以使用一个方法来完成这两个任务。这里的神奇之处在于它会检查您是否为您的属性提供了新值:

var _value;

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

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

myObj
     .setProp1("foo")
     .setProp2("bar");
Run Code Online (Sandbox Code Playgroud)

对象.defineProperty

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

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

然后你可以像访问公共财产一样访问它:

console.log(myObj.value);  // Calls the getter method
myObj.value = newValue;    // Calls the setter method
Run Code Online (Sandbox Code Playgroud)