我第一次在嚴格模式下工作,並且what-d'ya-know,它也是第一次在年齡中能夠使用非嚴格模式屬性將是有用的。我的question here概述了我遇到的確切問題,但是我已經制定的解決方案可以適應更多的可擴展性,如果我仍然可以訪問arguments.callee。在嚴格模式下複製arguments.callee
沒有命名的功能是否有任何方式在嚴格模式下,我可以得到一個函數,其範圍我目前在?
我第一次在嚴格模式下工作,並且what-d'ya-know,它也是第一次在年齡中能夠使用非嚴格模式屬性將是有用的。我的question here概述了我遇到的確切問題,但是我已經制定的解決方案可以適應更多的可擴展性,如果我仍然可以訪問arguments.callee。在嚴格模式下複製arguments.callee
沒有命名的功能是否有任何方式在嚴格模式下,我可以得到一個函數,其範圍我目前在?
沒有命名的功能在嚴格模式下,我可以通過任何方式獲得對當前範圍內的函數的引用?
不可以。您必須給函數一個名稱。我的錯誤,我想到了一種方式,請參閱下面的最終代碼塊。我不會像它,但我們有。 :-)
注意,你在這裏給道路功能的名稱:
UsageGraph = Graph.extend({
generateScale: function GS() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
}
})
...使用命名函數表達式。這些都是非常不可靠(link,link)在不同的實現(他們不應是但),在你上面的例子最值得注意的是,IE8和更早的版本將創建完全獨立的函數對象,指定其中一人的generateScale
財產並提及不同函數內的功能對象GS
。
這很容易解決,但:
UsageGraph = Graph.extend(function(){
function GS() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
}
return {generateScale: GS};
}())
或者,如果你真的不想要的功能有個名字(我更喜歡自己有名字,helps my tools help me,但嘿),您可以使用那封內的局部:
UsageGraph = Graph.extend(function(){
var GS = function() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
};
return {generateScale: GS};
}())
現在你有一個匿名的功能,但可以稱其爲GS
從內它。再說一遍,我不會推薦它,因爲那樣你不能在調用堆棧中看到函數名稱,但是你確實說了而沒有給函數一個名字,所以...
對於
@wheresrhys:(它是
是的,但沒有...我不知道這是你說的「命名」相同的方式:
var foo = function bob() {
// call bob();
}
// bob is undeclared; here it's foo!
使用IE8和更早版本時要小心,它會創建[兩個完全獨立的函數對象](http://blog.niftysnippets.org/2010/09/double-take.html),並在使用時泄露'bob'符號一個命名函數表達式。 – 2012-04-04 10:58:02
另請注意,提問者說*「**沒有**命名功能」*(我強調)。 – 2012-04-04 11:00:01
你可以指定你的函數到一些變量。 – antyrat 2012-04-04 10:56:53
進步是一件美好的事情。 – Rolf 2017-09-13 10:53:49