我想创建一个这样的函数,但是我希望变量name
和colour
成为这个函数的属性,这意味着我只需要在构造函数时给它们值,并且每次调用函数时都不必声明它们。
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"];
是否可以将某些属性设置为对象?感谢
最后问题由模块模式解决,请附上接受的答案。
答案 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"
}