詳細說說ActionScript中function的call()方法和apply()方法

來源:互聯網
上載者:User

詳細說說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, "給屬性賦值");
        fn.apply(__obj, new Array("給屬性賦值"));
    
       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, "給屬性賦值");
 fn.apply(__obj, new Array("給屬性賦值"));
 
 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方法起到動態改變函數指向,同時改變被指向類的一些屬性。

分類: as自己原創綠色通道:好文要頂關注我收藏該文與我聯絡

碩氣書生
關注 - 0
粉絲 - 2關注博主10(請您對文章做出評價)« 上一篇:有種感覺叫失去才知道珍惜
» 下一篇:Flash/Flex 架構簡介—PureMVC

posted @ 2010-06-30 18:04 碩氣書生 Views(201) Comments(0) Edit 收藏

註冊

今天看到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, "給屬性賦值");
        fn.apply(__obj, new Array("給屬性賦值"));
    
       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, "給屬性賦值");
 fn.apply(__obj, new Array("給屬性賦值"));
 
 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方法起到動態改變函數指向,同時改變被指向類的一些屬性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.