网乐原科技

直播中

news center新闻中心
首页 > 资讯中心 > 软件技术

Flash5 ActionScript高级编程指南(9)

发布时间:2008-08-14     阅读数: 次       来源:网乐原科技
三、自定义函数的运用

  第四点认识:谁雇用我,我就叫谁老板。当然这是一种比喻的说法,但却很形象的指出了函数体中this的真正含义。与一般的面向对象语言不同,FAS中的this只指代调用该函数时的实体。这么说可能比较难懂,那就来看一下下面这个例子:
  a = 1;
  function myMethod() {
    trace(this.a);
  }
  function myObject(){
    this.a = 0;
    this.method = myMethod;
  }
  myobj = new myObject;
  myobj.method(); // 3.4式 输出 0
  myFunc = myobj.method;
  myFunc(); // 3.5式 输出 1
这里,3.4式将如一般情况一样输出myobj对象的成员变量a的值0,而3.5式中的myFunc虽然等价于myobj的方法method(即myMethod),但由于这时的调用实体已变成更外层的对象或影片片段,this.a所指的变量也应为此对象或影片片段的成员(即首句中定义的a),因而输出为1。在C++中,this只能指代本对象的实例,也只能在成员函数中使用,而且要把一个成员函数赋值给某个函数指针也是不被允许的。这也充分体现了FAS中其实根本没有成员函数这一概念,所谓“方法”只不过是结构体中函数指针的伪装罢了。再补充一下,this在没有函数调用时永远只指代外层对象或影片片段,所以别指望下面那段程序能为对象myobj添加成员或为成员赋值:
  with (myobj) {
    this.a = 0; // a为要添加的成员
    this.b = 1; // b为myobj的成员
  }

  第五点认识:关于new一个对象的实际流程。大家都清楚,创建一个对象的格式是(没有参数时括号可省):
  myobj = new myObject(...);
可你有没有想过它的实际操作过程呢?别看它长的那么象Java或者C++里的创建对象实例,它可没那么高级,记住了,FAS里的对象实质可是结构体呀!或许你还不知道,在你定义了一个函数的时候,系统就已经为你自动创建了一个同名对象。而它可没有你函数中用this添加的成员,它的唯一成员只有object类型的prototype。现在你有点明白了为什么要有如3.1式那样:
  anyFunction.prototype.anyMember = ...
的写法了吧。以3.2式为例,实际执行创建对象的过程是这样的:
  (1)定义myobj为对象(只是一般的对象,无任何成员)
  (2)执行new后指定的函数(管它是不是构造函数,但若有this则指该对象)
  (3)拷贝myObject.prototype的所有成员到myobj门下
现在你知道FAS中的new与标准面向对象语言中的new的区别了吧,是不是也不用再对prototype产生困惑了呢。

3、函数使用的技巧

网乐原科技

客服热线:0771-5761507

QQ:53290011

QQ邮箱:53290011@qq.com

工作时间:周一到周五 9:00-18:00

地址:广西南宁市江南万达写字楼C16栋1309室

物联网开发

关注我们

微信小商店 腾讯QQ客服 微信客服