2011-12-28 42 views
0

调用(thisArg:*,... args)的第一个参数是什么意思?函数调用(thisArg:*,... args)actionscript中的第一个参数用法

假设f()的一个未命名的包作为全局函数被定义,以下是代码片段:

package { 
    public function f(message:String):void { 
     trace(message); 
     trace(this.watchedValue); 
    } 
} 

测试代码如下:

public function test():void { 
    var obj:Object = {watchedValue:100}; 
    f("invoking f"); 
    f.call(obj, "invoking f by call()");//actual result is undefined, but shouldn't be 100? 
} 
+4

你宣布你的变种为“OBJ”,但您在使用通话功能时,把它作为“O” ......这是只是在编写示例时发生错误? – joelrobichaud

回答

1

这param所在封闭件只用于和匿名函数,像

var testFunc:Function = function():void{trace(this.watchedValue)} 

编辑: 在你情况下,将通话

package { 
    public var f:Function = function(message:String):void { 
     trace(message); 
     trace(this.watchedValue); 
    } 
} 

EDIT2 第一个参数将是在调用的函数。这就是像对象的方法那样调用fauction的方法。 但是,当函数是方法或顶级函数时,call()的第一个参数将被忽略。要使用第一个参数,你的函数必须是匿名函数的变量。

+0

对不起,我想知道的是Fucntion.call()第一个参数的含义,不是关于“this”的关键字 – jason

+0

谢谢,它真的帮我理解了Function.call() – jason

0

据我所知Function.call()相同()函数,除了你改变this范围的事实。通常this引用当前类,但它可能是另一个类。 \

你的测试功能看起来错了,应该是obj而不是o

public function test():void { 
    var obj:Object = {watchedValue:100}; 
    f("invoking f"); 
    f.call(obj, "invoking f by call()"); 
} 
+0

这是一个错误,我已经把o改成了obj 。但令我困惑的是f.call(obj,“通过调用()”调用f),obj不是“this”类 – jason

相关问题