详细说说ActionScript中function的call()方法apply()


今天看到function的call和apply这两个方法,上网查了一下,有人说这两个方法是用来动态改变函数指向,并给了一个例子:如下

import customize.my_class;

public var _property:String;

public function init():void
{  
       var fn:Function = new Function();
       fn = function(...args):void
       {
         this._property = args;
       }

       var __obj:my_class = new my_class();
       
//fn.call(__obj, "给属性赋值1","给属性赋值2");

fn.apply(__obj, new Array("给属性赋值1","给属性赋值2"));


   trace(__obj._property);
}
=====================================
定义的my_class类
public class my_class
{
   public var _property:String;
   public function my_class()
   {
      this._property = "somiok";
   }
}

从上面代码可见fn函数是用函数表达式形式申明的,此时是可以动态改变函数指向的(也就是函数的this关键字随着函数的附着而改变)。

而我用函数语句形式试了一下,函数并不能动态改变自己的指向,只能起到执行函数的作用。

import customize.my_class;

public var _property:String;

public function init():void

var __obj:my_class = new my_class();
//fn.call(__obj, "给属性赋值1","
给属性赋值2");

fn.apply(__obj, new Array("给属性赋值1","给属性赋值2"));


trace(__obj._property);
}

private function fn(...args):void
{
this._property = args.toString();
}
=====================================
定义的my_class类
public class my_class
{
public var _property:String;
public function my_class()
{
   this._property = "somiok";
}
}

后来查了黑羽老大的书:函数语句定义法和函数表达式定义法的不同还体现在this关键字的记忆上。使用函数语句定义法,则this关键字牢牢指向当前函数定义的域;若使用函数表达式定义法,则随着函数附着的对象不同,this关键字也随之改变。

语句定义法需先声明后调用的原则。

总结:如果函数是函数语句定义的形式:则call方法和apply方法只起到执行函数的作用。

如果函数是函数表达式定义形式:则call方法和apply方法起到动态改变函数指向,同时改变被指向类的一些属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值