详细说说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方法起到动态改变函数指向,同时改变被指向类的一些属性。
详细说说ActionScript中function的call()方法和apply()方法相关推荐
- JS中的call()方法和apply()方法用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
- JavaScript学习(五十二)—继承、call方法和apply方法
JavaScript学习(五十二)-继承.call方法和apply方法 学习内容 一.继承 二.call方法 三.apply方法 一.继承 所谓继承就是两个构造方法建立起来的某种联系,通过某种联系,可 ...
- PIL库中Image类thumbnail方法和resize方法区别
from PIL import Image im=Image.open("C:\\Users\\kethur\\Desktop\\a.jpg") x,y=im.size pri ...
- js中call()方法和apply方法的使用
1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- 《ES6基础教程》之 Call 方法和 Apply 方法
1 <script type="text/javascript"> 2 // Call方法: 3 // 语法:call(thisObj[,arg1,arg2,...,a ...
- java中的正则matches方法和find方法的区别
Java 正则表达式里find()方法的使用 package com.zte.st.dailybuild.dao;import java.util.regex.Matcher; import java ...
- python:PIL库中Image类thumbnail方法和resize方法的比较
from PIL import Imageim=Image.open("C:\\Users\\kethur\\Desktop\\a.jpg") x,y=im.size print( ...
- vector类中为什么没有push_front方法和pop_front方法
vector是开辟一块空间来作为数组来存放元素(随机迭代器),如果有了pop_front,pop_back这个功能则很容易造成内存碎片,pop_front会造成头部内存产生碎片,pop_back造成尾 ...
- Hibernate中session的get方法和load方法的区别
一.发送SQL时机: load方法采用延迟加载(lazy懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用这个对象的数据(对象的数据不包括主键)的时候才发送SQL语句: get方法采用立即 ...
最新文章
- Swoole 1.8.12 发布,Bug修复版本
- [改善Java代码] 避免instanceof非预期结果
- 08-Isolation using virtualization in the Secure World_Whitepaper
- wireshrk中的名词说明
- 【基础】华为设备默认路由和静态路由配置实战
- 姜黄的毒副作用调研汇总(调研手稿一)
- 要成为一个 Java 架构师得学习哪些知识以及方法?
- 企业微信H5_消息推送接收消息回调配置、内网穿透到本地
- 200个最常见的JAVA面试问题(附答案)
- 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
- matlab:代码输出矢量图
- 联想计算机睡眠如何唤醒,笔记本电脑休眠和睡眠如何唤醒
- matlab的方法定义变量,Matlab定义变量的操作步骤
- 使用VS Code远程连接服务器,在VS Code上编辑服务器文件。超级简单
- 北斗短报文通信原理及功能介绍
- 算法设计与分析递归概念之Fibonacci数列
- 固态硬盘的坏块管理,你知道和不知道的
- 腾讯企业邮箱支持 pop/imap/exchange服务器地址(用于客户端)
- 菜鸟学人工神经网络(C++11实现)零:矩阵类
- macbook 终端命令怎么使用_玩转 Terminal 终端:入门指南及进阶技巧
热门文章
- Java数据结构与算法(12) - ch06递归(回文anagram)
- 服务器变量:$_SERVER
- 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描
- 用c语言递归函数实现焚天塔的过程,梵天塔问题.PPT
- Java校招笔试题-Java基础部分(二)
- java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
- 设计模式--结构型模式
- 从MongoDB2.4升级到3.0的详细步骤
- JAVA无法加载此类文件,ORA-00376: 此时无法读取文件问题处理
- r语言集合补集_【高中数学必修1研读】之一“第一章 集合与函数概念”