今天看到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方法起到动态改变函数指向,同时改变被指向类的一些属性。

详细说说ActionScript中function的call()方法和apply()方法相关推荐

  1. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  2. JavaScript学习(五十二)—继承、call方法和apply方法

    JavaScript学习(五十二)-继承.call方法和apply方法 学习内容 一.继承 二.call方法 三.apply方法 一.继承 所谓继承就是两个构造方法建立起来的某种联系,通过某种联系,可 ...

  3. PIL库中Image类thumbnail方法和resize方法区别

    from PIL import Image   im=Image.open("C:\\Users\\kethur\\Desktop\\a.jpg") x,y=im.size pri ...

  4. js中call()方法和apply方法的使用

    1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  5. 《ES6基础教程》之 Call 方法和 Apply 方法

    1 <script type="text/javascript"> 2 // Call方法: 3 // 语法:call(thisObj[,arg1,arg2,...,a ...

  6. java中的正则matches方法和find方法的区别

    Java 正则表达式里find()方法的使用 package com.zte.st.dailybuild.dao;import java.util.regex.Matcher; import java ...

  7. python:PIL库中Image类thumbnail方法和resize方法的比较

    from PIL import Imageim=Image.open("C:\\Users\\kethur\\Desktop\\a.jpg") x,y=im.size print( ...

  8. vector类中为什么没有push_front方法和pop_front方法

    vector是开辟一块空间来作为数组来存放元素(随机迭代器),如果有了pop_front,pop_back这个功能则很容易造成内存碎片,pop_front会造成头部内存产生碎片,pop_back造成尾 ...

  9. Hibernate中session的get方法和load方法的区别

    一.发送SQL时机: load方法采用延迟加载(lazy懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用这个对象的数据(对象的数据不包括主键)的时候才发送SQL语句: get方法采用立即 ...

最新文章

  1. Swoole 1.8.12 发布,Bug修复版本
  2. [改善Java代码] 避免instanceof非预期结果
  3. 08-Isolation using virtualization in the Secure World_Whitepaper
  4. wireshrk中的名词说明
  5. 【基础】华为设备默认路由和静态路由配置实战
  6. 姜黄的毒副作用调研汇总(调研手稿一)
  7. 要成为一个 Java 架构师得学习哪些知识以及方法?
  8. 企业微信H5_消息推送接收消息回调配置、内网穿透到本地
  9. 200个最常见的JAVA面试问题(附答案)
  10. 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
  11. matlab:代码输出矢量图
  12. 联想计算机睡眠如何唤醒,笔记本电脑休眠和睡眠如何唤醒
  13. matlab的方法定义变量,Matlab定义变量的操作步骤
  14. 使用VS Code远程连接服务器,在VS Code上编辑服务器文件。超级简单
  15. 北斗短报文通信原理及功能介绍
  16. 算法设计与分析递归概念之Fibonacci数列
  17. 固态硬盘的坏块管理,你知道和不知道的
  18. 腾讯企业邮箱支持 pop/imap/exchange服务器地址(用于客户端)
  19. 菜鸟学人工神经网络(C++11实现)零:矩阵类
  20. macbook 终端命令怎么使用_玩转 Terminal 终端:入门指南及进阶技巧

热门文章

  1. Java数据结构与算法(12) - ch06递归(回文anagram)
  2. 服务器变量:$_SERVER
  3. 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描
  4. 用c语言递归函数实现焚天塔的过程,梵天塔问题.PPT
  5. Java校招笔试题-Java基础部分(二)
  6. java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
  7. 设计模式--结构型模式
  8. 从MongoDB2.4升级到3.0的详细步骤
  9. JAVA无法加载此类文件,ORA-00376: 此时无法读取文件问题处理
  10. r语言集合补集_【高中数学必修1研读】之一“第一章 集合与函数概念”