众所周知,在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 };
}
}
这是唯一的方法吗?
答案 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;