我有一个对象文字,用作配置元素并查找密钥。
customRendering:{
key1: func(){....},
key2: func(){....}
}
我的情况是key2
和key3
可以使用相同的功能。有没有办法为key2
和key3
分配相同的函数,而不必在对象文字之外声明函数而不必声明额外的键?
我希望我可以做类似的事情:
key2: key3: func(){....}
答案 0 :(得分:10)
我不知道我之前在想什么。如果你使用更详细的“文字”,你可以实例化一个自定义函数:
o = new function () {
this.foo = function () { console.log('works'); };
this.bar = this.foo;
};
var
,这样就不会污染全局命名空间:
(function () {
var o, baz;
o = {
foo: baz = function () {console.log('works')},
bar: baz
}
//more code
}());
我称这是一个肮脏讨厌的黑客的原因是它使代码不易读取,更难判断检查此代码(特别是如果对象文字声明更长) where {{ 1}}已设置。
最好只在对象文字外部编写别名,以便明确显示它是别名。
注意:指定的函数格式不起作用:
baz
在对象文字中无法使用共享引用定义别名。
你可以使用别名功能,但它不会是一个相同的参考:
o = { //THIS WON'T WORK
foo: function baz() {/* code */},
bar: baz
}
共享引用的典型方法是在对象文字之后,这听起来像你想要避免的那样:
o = {
foo: function...
bar: function () { return this.foo() } //even better if you use `apply` or `call`
}
或者,正如您在问题中指出的那样(并且为了完整性),您可以在对象文字之外定义函数:
o = {
foo: function...
}
o.bar = o.foo;
响应@Peter关于从函数返回对象
使用自动执行的匿名函数另一种实例化内联对象的方式,并且会使整个问题变得毫无疑问:
func = function () {/* code */};
o = {
foo: func,
bar: func
}
或者像这样:
o = (function () {
var o = {
foo: function () {/*code*/}
}
o.bar = o.foo;
return o;
}());
答案 1 :(得分:1)
无需在对象文字
之外声明该函数
我认为这部分使它变得不可能。然而,虽然我一直使用JavaScript,但我不是专业的JS忍者,所以也许我错了。
我将如何做到这一点的代码(虽然看起来你已经知道你可以做到这一点,但我认为最好还是这样说):
customRendering = {};
customRendering.key1 = func(){....};
customRendering.key2 = customRendering.key1;
答案 2 :(得分:-1)
定义除对象之外的函数:
var func = function() { ... };
...
customRendering: {
key1: func,
key2: func
}
答案 3 :(得分:-2)
抱歉,我理解你的问题不正确。
这是一个可能的解决方案:
var obj = {
func1: function() {},
func2: obj.func1
}