当函数返回结果和当在JavaScript中的函数

我看到很多函数返回的结果不是函数。 下面的例子显示函数getWindow返回函数。 为什么它不能只是返回变量“赢”? 当我返回结果和何时功能? 谢谢。

var A = function(){};
A.prototype=
{
   getWindow : function()
   {
        var win = new B.window();
        return (
                this.getWindow = function()
                {
                    return win;
                })();

   }
}

此代码与您的代码等效,但更易于理解:

A.prototype = {
    getWindow: function() {

        var win = new B.window();

        this.getWindow = function() {
            return win;
        };

        return win;

    }
}

用法:

首先,创建一个A实例:

var a = new A();

然后,在该实例上调用getWindow

a.getWindow();

这里调用A.prototypegetWindow方法。 正如你在上面的代码中看到的, A.prototype.getWindow将创建一个new B.window()返回它 ,但是在它之间,它也会在实例对象本身创建一个getWindow方法。

现在,如果再次调用getWindow

a.getWindow();

A.prototype.getWindow 不再被调用,因为实例对象本身有一个getWindow方法。 此方法返回第一次调用getWindow方法时返回的相同“win”对象。


您的模式允许多个A实例使用相同的A.prototype.getWindow方法来实例化他们自己的“胜利”对象。 考虑这个:

var a1 = new A,
    a2 = new A,
    a3 = new A;

a1.getWindow(); // creates window W1 and returns it
a2.getWindow(); // creates window W2 and returns it

a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2

a3.getWindow(); // creates window W3 and returns it

a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2
a3.getWindow(); // returns window W3

这是一个相当有用的模式:)


更新:

这是你的代码:

return (this.getWindow = function() {
    return win;
})();

首先,让我们看看parens中的表达式:

this.getWindow = function() { return win; }

正如你所看到的,这是一个赋值表达式。 匿名函数对象被分配给getWindow通过引用的对象的属性this (实例对象)。

请注意,该函数返回win对象。

这个赋值表达式的结果是函数对象本身! 这意味着parens中的值是函数对象。

现在,让我们来看看整个画面:

return ( the_function_object )();

因为我们不再需要它们,所以我们可以移除这些包裹:

return the_function_object();

正如你所看到的,函数对象被调用, 然后返回该函数的返回值。

如上所述,该函数返回win 。 因此,代码解决了这个问题:

return win;

所以你的代码做的是:

首先,它分配function() { return win; } function() { return win; } this.getWindow

第二,它返回调用那个win函数的结果。

我的代码产生相同的结果,但更容易理解:

this.getWindow = function() {
    return win;
};

return win;
链接地址: http://www.djcxy.com/p/51655.html

上一篇: When function returns result and when function in JavaScript

下一篇: WPF Tab Margins