|
|
|||||
Какой смысл в Function.call()
Углубляясь в АС3, нашёл в справочнике
apply(thisArg:*, argArray:*):* Указывает значение thisObject, используемого в любой функции, вызываемой ActionScript. Function call(thisArg:*, ... args):* Вызывает функцию, представленную объектом Function. Вот только смысла их я не понял... Функция вызывается просто через имя(аргументы) И причём тут thisArg?
__________________
Не бойся, если ты один. Бойся, если ты ноль |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
thisArg - устанавливает объект активации. Проще говоря, куда ссылается this. Для методов в AS3, слава богу, не работает.
У тебя есть метод method(a,b,c) и есть массив [0,4,6]. Ты можешь вызвать этот метод вот так: С call - то же самое, только неограниченное количество параметров он берёт как массив.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Регистрация: Dec 2005
Адрес: вне пространствавремени
Сообщений: 27
|
Они полезны, когда надо вызвать калбек имея при себе ссылку на сам метод, а не объект+имя_метода, да и передавать просто ссылку на метод удобнее. thisArg будет полезен если используешь не метод(который привязан к конкретному экземпляру), а анонимные функции/замыкания.
__________________
while(true){trace(Math.random());}; |
|
|||||
[+4 06.05.14]
|
var obj1:Object = {value:1}; var obj2:Object = {value:2}; var handler:Function = function():void{ trace(this.value); } handler.apply(obj1); // 1 handler.apply(obj2); // 2 var obj1:Object = {value:1}; var obj2:Object = {value:2}; function getValue(o:Object) { trace(o.value) } getValue(obj1); // 1 getValue(obj2); // 2 Добавлено через 1 минуту Очень нужная вещь была в ас2, когда пользовались делигатом . в ас3 особого смысла не представляет
__________________
Марк Tween |
|
|||||
Цитата:
вот простой пример где используются apply\call ps: некогда придумывать еще какой-то пример
__________________
местонахождение |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
.call полезен.
|
|
|||||
и своей "практики" могу привести пример, где Function.call полезен.
Представьте себе что у вас есть метод который принимает строку формата "something with %var%, %var%" и неограниченное количество параметров для подставления вот в такие форматы "%var name%" и его сигнатура вот такая: function printf(str:String, ...args:Array):String и вот вам понадобилось этот самый метод завернуть в другой, например в нем вы описываете попытку взять эту саму str из xml. и этот метод для удобства имеет точно такую же сигнатуру: function getVarByParams(varname:String, ...params:Array):String только в его теле вы сталкиваетесь с тем, что передать ...params вы не можете просто передав как printf(var_from_xml, params); так как будет передан просто массив параметров первым элементом массива. В этом случае Function.call может оказаться спасительным printf.call(null, var_from_xml,params) вызовет метод именно так как вы этого и ожидали. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
ramshteks, всё круто, только это не про call.
|
Часовой пояс GMT +4, время: 01:25. |
|
« Предыдущая тема | Следующая тема » |
|
|