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

Create a function-attribute of a function, which is, in its turn, a method of an object literal

本文关键字:函数 属性 对象 文字 方法 创建      更新时间:2023-09-26

众所周知,在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说,我们可以在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 } }
    ),
};

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

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

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

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

问题是,如果您尝试在不首先创建obj.digit的情况下创建obj.digit.5,则会出现"未定义"错误。

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

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

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

obj.digit = digit;