this.String = {
Get : function (val) {
return function() {
return val;
}
}
};
什么是':'在做什么?
答案 0 :(得分:10)
this.String = {}
指定一个对象。 Get
是该对象的属性。在javascript中,对象属性及其值由冒号':'分隔。
因此,根据示例,您可以像这样调用函数
this.String.Get('some string');
更多例子:
var foo = {
bar : 'foobar',
other : {
a : 'wowza'
}
}
alert(foo.bar); //alerts 'foobar'
alert(foo.other.a) //alerts 'wowza'
答案 1 :(得分:8)
其他人已经解释了这段代码的作用。它创建一个包含单个函数(称为this.String
)的对象(称为Get
)。我想解释你什么时候可以使用这个功能。
在需要更高阶函数的情况下(这是一个期望另一个函数作为参数的函数),此函数非常有用。
假设您有一个功能对Array
的每个元素执行某些操作,请将其称为map
。你可以像这样使用这个函数:
function inc (x)
{
return x + 1;
}
var arr = [1, 2, 3];
var newArr = arr.map(inc);
map
函数将执行的操作是创建一个包含值[2, 3, 4]
的新数组。它将通过使用数组的每个元素调用函数inc
来完成此操作。
现在,如果你经常使用这个方法,你可能会不断用各种各样的参数调用map
:
arr.map(inc); // to increase each element
arr.map(even); // to create a list of booleans (even or odd)
arr.map(toString); // to create a list of strings
如果由于某种原因你想用相同的字符串替换整个数组(但是保持相同大小的数组),你可以像这样调用它:
arr.map(this.String.Get("my String"));
这将创建一个与arr
大小相同的新数组,但只是一遍又一遍地包含字符串"my String"
。
请注意,在某些语言中,此函数是预定义的并且称为const
或constant
(因为无论它的参数是什么,每次调用它时它总是返回相同的值)。
现在,如果你认为这个例子不是很有用,我会同意你的看法。但是有些情况下,当使用更高阶函数编程时,使用这种技术。
例如,如果您想要“清除”其值但保留树的结构,则它可能很有用。您可以tree.map(this.String.Get("default value"))
创建一个全新的树,其形状与原始树完全相同,但没有任何值。
答案 2 :(得分:4)
它将具有“Get”属性的对象分配给this.String
。 “Get”被赋予一个匿名函数,该函数将返回一个函数,该函数只返回给第一个返回函数的参数。听起来很奇怪,但这是如何使用的:
var ten = this.String["Get"](10)();
ten
将包含10.相反,您可以编写等效的
var ten = this.String.Get(10)();
// saving the returned function can have more use:
var generatingFunction = this.String.Get("something");
alert(generatingFunction()); // displays "something"
也就是说,:
只是为某个属性赋予了一些价值。
答案 3 :(得分:1)
这个答案可能有点夸张,因为汤姆是一个很好的答案,但只是把它煮熟并完成: -
this.String = {};
将对象添加到当前对象,其属性名称为String
。
var fn = function(val) {
return function() { return(val); }
}
从闭包返回一个函数,该函数又返回用于创建闭包的参数。因此: -
var fnInner = fn("Hello World!");
alert(fnInner()); // Displays Hello World!
然后组合: -
this.String = { Get: function(val) {
return function() { return(val); }
}
使用属性名为String
的当前对象添加一个对象,该对象具有一个名为Get
的方法,该方法从闭包中返回一个函数,该闭包又返回用于创建闭包的参数。 / p>
var fnInner = this.String.Get("Yasso!");
alert(fnInner()); //displays Yasso!