以 JavaScript 对象文字表示法设置函数的属性
Setting properties on functions in JavaScript object literal notation
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; } },
...
})
};
这可能最接近于满足您以对象文字形式编写函数属性的愿望。
或者,您可以使用大多数框架(或 ES6 中Object.assign
(中提供的extend
功能:
var api = {
c: Object.assign(function() { }, {
m: function() { return 2; }
)
};
随意将Object.assign
替换为$.extend
、_.extend
等。
根据你对丑陋的容忍度,你可以尝试以下方法,这是@zerkms提案的变体,没有IIFE(你需要一个可变的x
(:
var api = {
c: (x = function() { }, x.m = function() { return 2; }, x)
};
从技术上讲这是可能的,但它很丑陋
var api2 = {
c: (function() {
var f = function() {};
f.m = 'something else';
return f;
}())
};
所以我个人认为没有充分的理由这样做,而不是在第一种情况下你如何做。
相关文章:
- 如何在页面加载时设置函数的条件
- 如何在Javascript中设置函数在上一次结束时启动
- 在对象中定义JavaScript获取和设置函数,而不使用“;这个“;
- 杰辛特 |传递默认设置 |函数声明和“this”
- 在运行时用JavaScript设置函数的名称
- 用对象设置函数变量's值
- 当我在tinmyce.int()中编写设置函数时,tinymce消失了,只有纯文本区域可见
- 如何使用JavaScript变量设置函数集css宽度
- Javascript;取消设置函数
- 设置函数图像样式
- 为什么我的设置函数之间的超时不起作用
- jQuery 设置函数执行前的等待时间
- 在Node.js中设置函数执行顺序
- 如何在javascript中设置函数的优先级
- 设置函数变量与使用对象文字相同
- 以 JavaScript 对象文字表示法设置函数的属性
- 使用jQuery's.prop方法来设置函数的属性
- 设置函数的超时时间
- 显式设置函数的返回类型
- 当bool值变为true时,如何设置函数调用