如何在JavaScript中设置函数本身的一些属性(模块模式)

时间:2015-08-12 06:54:55

标签: javascript

我想创建一个这样的函数,但是我希望变量namecolour成为这个函数的属性,这意味着我只需要在构造函数时给它们值,并且每次调用函数时都不必声明它们。

function A(input) {
    var name = ["USA", "Japan", "India"]; // make it properties
    var color = ["blue", "red", "green"]; // make it properties
    var index = name.indexOf(input);
    return color[index];
}

为了说清楚,让我展示我的理想代码:

function A(input) {
    var index = this.name.indexOf(input);
    return this.color[index];
}
A.name = ["USA", "Japan", "India"];
A.color = ["blue", "red", "green"];

是否可以将某些属性设置为对象?感谢

最后问题由模块模式解决,请附上接受的答案。

3 个答案:

答案 0 :(得分:2)

模块模式可以做到这一点,但它会使属性变为私有(我不知道它是否是你需要的):

var A = (function() {
    var name = ["USA", "Japan", "India"];
    var color = ["blue", "red", "green"];

    return function(input) {
        var index = name.indexOf(input);
        return color[index];
    };
})();

答案 1 :(得分:0)

通过传递参数中的值,最简单的方法就可以做到这一点。

function A(input, name, color) {
    var index = name.indexOf(input);
    return color[index];
}
//Can be called like this
A("USA", ["USA", "Japan", "India"], ["blue", "red", "green"]);

或者你可以将一个对象传递给一个然后从中获取它。

function A(objectInput) {
  var input = objectInput.input ? objectInput.input : "",
      name =  objectInput.name  objectInput.name : [],
      color = objectInput.color ? objectInput.color : [],
      index = name.indexOf(input);
  return color[index];
}
//Called like this.
A({
   input: "USA",
   name:  ["USA", "Japan", "India"],
   color: ["blue", "red", "green"]
});

答案 2 :(得分:0)

function A(input) {
    var index = A.country.indexOf(input);
    return A.color[index];
}
A.country = ["USA", "Japan", "India"];
A.color = ["blue", "red", "green"];

console.log(A("USA")); //Blue

不要使用name作为属性名称,默认情况下会返回函数名称。

更好的代码风格:

function A(input) {
    return A.colors[input];
}

A.colors = {
    "USA": "blue",
    "Japan": "red",
    "India": "green"
}