当函数返回结果和当在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.prototype
的getWindow
方法。 正如你在上面的代码中看到的, 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