Вы не можете. Тем не менее, вы могли бы сделать
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
функция, доступная в большинстве структур (или Object.assign
в ES6):
var api = {
c: Object.assign(function() { }, {
m: function() { return 2; }
)
};
Feel свободно заменить Object.assign
с $.extend
, _.extend
и т.д.
В зависимости от вашей толерантности для уродства вы можете попробовать следующее: вариант предложения @ zerkms без IIFE (вам понадобится переменная x
):
var api = {
c: (x = function() { }, x.m = function() { return 2; }, x)
};
Возможный дубликат [Объявление и назначение объекта функции с помощью ключей объекта в одной строке] (http://stackoverflow.com/questions/25098069/declaring-and-assigning-a-function-object-with-object-keys -in-one-line) –
Работали ли какие-либо из этих ответов? Если да, примите. –