这个javascript代码在做什么?

时间:2009-01-26 21:49:27

标签: javascript

this.String = {
    Get : function (val) {
        return function() {
            return val;
        }
    }
};

什么是':'在做什么?

4 个答案:

答案 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"

请注意,在某些语言中,此函数是预定义的并且称为constconstant(因为无论它的参数是什么,每次调用它时它总是返回相同的值)。


现在,如果你认为这个例子不是很有用,我会同意你的看法。但是有些情况下,当使用更高阶函数编程时,使用这种技术。

例如,如果您想要“清除”其值但保留树的结构,则它可能很有用。您可以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!