众所周知,在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;