创建函数的函数属性,而函数属性又是对象文字的方法

时间:2015-12-19 03:52:04

标签: 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()方法的情况下完成?

P.S:用户nnnnnn here says,我们可以在obj.digit()内创建一个属性:

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

这是唯一的方法吗?

3 个答案:

答案 0 :(得分:3)

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

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 } }
    ),
};

答案 1 :(得分:2)

不确定是否能回答您的问题,但您可以这样做:

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

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

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

答案 2 :(得分:0)

记住 - 在JS函数中是对象:)

因此,为了创建obj.digit.five属性,您必须首先声明obj.digit属性(它可以是任何东西,但必须是已定义的对象),然后您可以向此属性添加键。

问题是,如果您尝试创建obj.digit.five而不先创建obj.digit,则会出现“unefined”错误。

请记住,在第一个示例中创建digit会创建匿名函数并将其分配给digit密钥。您可以尝试其他解决方案并在以下方面创建此功能:

var digit = function() {...};
digit.five = function() {...};
digit.otherproperty = 3;

然后分配所有属性/函数/等。到它然后将这个创建的变量分配给obj,如:

obj.digit = digit;