javascript - 创建一个函数的函数属性,它又是一个对象字面量的方法

标签 javascript object-literal function-attributes

众所周知,在 JS 中,您可以在函数内部创建一个函数,如下所示:

function digit() { return 9 };
digit.five = function() { return 5 };

digit();     // 9
digit.five() // 5

我不知道这是否是一种不好的做法(可能是)——因为它可以正常工作,您可以使用它。

但是如果我们有一个 digit() 会怎样呢?作为某个对象的方法起作用(参见下面的示例)?
那我们怎么声明digit.five() ?假设我们要在 obj 的范围内声明它.

var obj = {
    digit: function() { return 9 },
 // digit.five: … ???
 // digit["five"]: … ???
}

obj.digit();     // 9
obj.digit.five() // 5

有没有可能不创建新的 obj.digitFive()方法?


附言:用户nnnnnn here says , 我们可以在 obj.digit() 中创建一个属性:

var obj = {
    digit: function () {
        return 9;
        obj.digit.five = function () { return 5 };
    }
}

这是唯一的方法吗?

最佳答案

没有内置语法可以将属性放在函数表达式上,没有。您可以在之后添加该属性:

var obj = {
    digit: function() { return 9 },
};

obj.digit.five = function() { return 5 };

ES6 的标准函数 Object.assign 也能很好地工作:

var obj = {
    digit: Object.assign(
        function() { return 9 },
        { five: function() { return 5 } }
    ),
};

关于javascript - 创建一个函数的函数属性,它又是一个对象字面量的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367091/

相关文章:

javascript - Javascript中的条件array.join

javascript - 删除函数工作一次,然后从其余元素中卸载 [JavaScript 模块]

c - GCC 属性对嵌套函数的影响

c++ - GCC - 将宏用于函数属性时出现 "has initializer but incomplete type"错误

c++ - 如何将 GCC 的 printf 格式属性与 C++11 可变参数模板一起使用?

javascript - jquery中如何将mouseover和mouseleave事件与不同的目标关联起来?

javascript - 获得对 CSSMediaRule 的可读访问权限

javascript - 重写下划线_.uniq

Javascript 对象文字 : why can't I do this?

javascript - JavaScript 数组文字定义中逗号后的值是什么?