Вызов функции (thisArg: *, ... args) использование первого параметра в actionscript - PullRequest
0 голосов
/ 28 декабря 2011

что означает вызов первого параметра (thisArg: *, ... args)?

Предполагая, что 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?
}

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Этот параметр используется только в замыканиях и анонимных функциях, например

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

EDIT: в вашем случае это будет

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

EDIT2 первый параметр вызова будет в вызываемой функции. Это способ вызвать fauction как метод объекта. Но когда функция является методом или функцией верхнего уровня, первый параметр call () будет игнорироваться. Чтобы использовать первый параметр, ваша функция должна быть переменной с анонимной функцией.

0 голосов
/ 29 декабря 2011

Насколько я знаю Function.call () - это то же самое, что и function () , за исключением того, что вы меняете область действия this,Обычно this ссылается на текущий класс, но это может быть другой класс.\

Ваша тестовая функция выглядит неправильно, она должна быть obj вместо o

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