创建一个函数属性,该函数是对象字面量的方法。

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()方法就能实现呢?


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

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

这是唯一的方法吗?

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

2

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

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

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

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

0

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

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

问题是,如果您尝试在未创建obj.digit之前创建obj.digit.five,您将收到“未定义”错误。

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

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

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

obj.digit = digit;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接