var api = {};
api.c = function () {return 1};
api.c.m = function () {return 2};
alert(api.c()); // returns 1
alert(api.c.m()); // returns 2
var api2 = {
c: function () {}; // can't put m inside c in object literal notation
};
我们如何以对象字面量表示法将 m 嵌入到 c 中?
最佳答案
你不能。但是,您可以这样做
Object.defineProperty(api.c, 'm', { value: function() { return 2; } });
因为 Object.defineProperty
返回对象,你可以这样做
var api = {
c: Object.defineProperty(function() { }, 'm', {
value: function() { return 2; }
})
};
或者对于多个属性:
var api = {
c: Object.defineProperties(function() { }, {
m: { value: function() { return 2; } },
...
})
};
这可能最能满足您以对象文字形式编写函数属性的愿望。
或者,您可以使用大多数框架中可用的extend
功能(或 ES6 中的 Object.assign
):
var api = {
c: Object.assign(function() { }, {
m: function() { return 2; }
)
};
请随意将 Object.assign
替换为 $.extend
、_.extend
等
根据您对丑陋的容忍度,您可以尝试以下方法,这是不带 IIFE 的 @zerkms 提议的变体(您需要一个变量 x
):
var api = {
c: (x = function() { }, x.m = function() { return 2; }, x)
};
关于javascript - 在 JavaScript 对象字面量表示法中设置函数的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311655/