详细说说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方法起到动态改变函数指向,同时改变被指向类的一些属性。
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2010/12/01/1892609.html如需转载请自行联系原作者

jiahuafu

相关文章
|
2月前
|
数据采集 自然语言处理 Devops
ToolLearning Eval:CodeFuse发布首个中文Function Call的大语言模型评测基准!🚀
CodeFuse发布了首个面向ToolLearning领域的中文评测基准ToolLearning-Eval,以帮助开发者跟踪ToolLearning领域大模型的进展,并了解各个ToolLearning领域大模型的优势与不足。ToolLearning-Eval按照Function Call流程进行划分,包含工具选择、工具调用、工具执行结果总结这三个过程,方便通用模型可以对各个过程进行评测分析。
539 0
|
1月前
|
存储 JSON 前端开发
JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
|
8月前
Fatal error: Call to undefined function openssl_pkey_get_private()
Fatal error: Call to undefined function openssl_pkey_get_private()
50 0
|
2月前
|
JavaScript
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
|
7月前
|
Python
Python(二十九)pycharm连接调试器失败 Interrupted function call accept failed~
Pycharm在使用调试器模式时报错: Interrupted function call: accept failed
165 0
|
11月前
|
监控 Linux Apache
访问zabbix安装页面报错500,apache报错Call to undefined function mb_detect_encoding()
访问zabbix安装页面报错500,apache报错Call to undefined function mb_detect_encoding()
176 0
|
12月前
|
PHP
PHP报错Call to undefined function utf8_decode()的解决方案
PHP报错Call to undefined function utf8_decode()的解决方案
103 0
|
1天前
|
Serverless
怎么用std::function封装一个普通函数啊
怎么用std::function封装一个普通函数啊?
6 1
|
22天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `<`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。

热门文章

最新文章