创建一个函数的函数属性,它又是一个对象字面量的方法
Create a function-attribute of a function, which is, in its turn, a method of an object literal
众所周知,在 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 };
}
}
这是唯一的方法吗?
没有内置语法可以将属性放在函数表达式上,没有。您可以在之后添加 属性:
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.five 而没有先创建 obj.digit
,您将得到 "unefined" 错误。
请记住,在您的第一个示例中创建 digit
会创建匿名函数并将其分配给 digit
键。您可以尝试其他解决方案并在旁边创建此功能,例如:
var digit = function() {...};
digit.five = function() {...};
digit.otherproperty = 3;
然后赋值所有properties/functions/etc。给它,然后将这个创建的变量分配给 obj,如:
obj.digit = digit;
众所周知,在 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 };
}
}
这是唯一的方法吗?
没有内置语法可以将属性放在函数表达式上,没有。您可以在之后添加 属性:
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.five 而没有先创建 obj.digit
,您将得到 "unefined" 错误。
请记住,在您的第一个示例中创建 digit
会创建匿名函数并将其分配给 digit
键。您可以尝试其他解决方案并在旁边创建此功能,例如:
var digit = function() {...};
digit.five = function() {...};
digit.otherproperty = 3;
然后赋值所有properties/functions/etc。给它,然后将这个创建的变量分配给 obj,如:
obj.digit = digit;