javascript - 在 JavaScript 对象字面量表示法中设置函数的属性

标签 javascript

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/

相关文章:

javascript - 动态更改链接的 KML 文件中多边形的颜色

javascript - Jquery - 桌面显示器和 iPad 的自定义 js 文件......?

javascript - 在 map 函数中设置特定于元素的 css

javascript - 必填字段未收到 form_for 错误

javascript - 启动时 Node 检查器错误

javascript - 等待的javascript中的简单任务运行器

javascript - 用矩形代替刻度 D3

javascript - 将jquery移入js文件导致引用错误和类型错误

javascript - 与浏览器缓存相关的查询

javascript - 如何将三个单独的字段验证为日期