3

众所周知,在 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()方法?


PS:这里的用户nnnnnn ,我们可以在里面创建一个属性: obj.digit()

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

这是唯一的方法吗?

4

3 回答 3

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 } }
    ),
};
于 2015-12-19T03:56:44.967 回答
2

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

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

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

obj.digit();     // 9
obj.digit.five() // 5
于 2015-12-19T03:56:57.200 回答
0

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

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

问题是如果您尝试创建 obj.digit.five 而不obj.digit先创建,您会收到“未定义”错误。

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

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

然后分配所有属性/功能/等。给它,然后将此创建的变量分配给 obj ,例如:

obj.digit = digit;
于 2015-12-19T04:02:49.017 回答