浅谈ActionScript3中的原型对象

简介:
AS3和java等语言不同,在它里面一切都是对象,就连类也是对象,所有的类,包括我们自己定义的任何类,他们的原型对象都是object类。

         首先通过一个简单的例子来对prototype有一个感性直观的认识。Prototype是类中一个静态属性,它表示对类的原型对象的引用。

我们先来自己定义两个满足继承关系的类:

public dynamic class ParentClass {}
public dynamic class ChildClass extends ParentClass {
然后我们在脚本中写:

trace(ParentClass.prototype, ChildClass.prototype);
结果输出:

[object Object] [object Object]  
 从这里的结果[object Object] ,我们可以看出第一个object 代表对象,而第二个Object代表Object类,整个的意思就是说这是一个对象,他是Object类。

我们可以动态地向原型对象中添加属性,并且在父类的prototype中添加的属性是可以被子类所共享的,下面通过一个例子加以说明,我们在父类的prototype中加入了一个sayHello函数。然后就可以在子类中对其进行访问,与之相对的是,若我们在子类的prototype中添加函数,则其他子类是无法访问到的。即用哪个类向原型加的属性,你就只能用这个类调用。

复制代码
public class ParentClass
{
    prototype.sayHello = function():String
    {
        return "hello,ptototype";
    }
}
public class ChildOne extends ParentClass
{
}
public class ChildTwo extends ParentClass
{
}

public function onCreate():void
{
    var strInfo:String = ChildOne.prototype.sayHello();
    trace(strInfo);
    var str1:String = ChildTwo.prototype.sayHello();
    trace(str1);
    ChildOne.prototype.testFunc = function() : void
    {
        trace("just for test.");
    }
    ChildOne.prototype.test();
    //ChildTwo.prototype.test();
}
复制代码
类的实例跟类在原型对象上还有一点区别的,一个类的实例最初的原型对象都是未定义的,既不是O bject类也不是定义这个实例的类。也就是说当我们对一个类进行实例化时,这个实例的原型对象是未定义的。

    我们对上面定义的ChildOne类进行实例化:

    var c1:ChildOne = new ChildOne();
    trace(c1.prototype);
测试输出:

undefined
 但是实例的prototype属性我们可以动态给他赋值,前提是类必须要是动态类。代码如下:

 var c1:ChildOne = new ChildOne();

c1.prototype = ChildTwo;
trace(c1.prototype);
测试输出:

[class ChildTwo]
      这表明是它的原型对象是一个类, 类名为ChildTwo。

最后再补充一点关于命名空间的知识, 命名空间中可以放置函数,变量和常量,但不能放置类的定义。下面是一个简单的命名空间的实例:

 public namespace myspace = "http://phinecos.cnblogs.com";

复制代码

myspace function myfunc():void
{
    trace("test namespace.");
}

use namespace myspace;
myfunc();
myspace::myfunc();
复制代码



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2010/04/03/1703976.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
JavaScript 前端开发
深入理解 JavaScript 对象原型,解密原型链之谜(上)
深入理解 JavaScript 对象原型,解密原型链之谜(上)
|
7月前
|
JavaScript 前端开发
深入理解 JavaScript 对象原型,解密原型链之谜(下)
深入理解 JavaScript 对象原型,解密原型链之谜(下)
|
7月前
|
存储 JavaScript 前端开发
【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
【1月更文挑战第17天】【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
|
7月前
|
存储 JSON 前端开发
JavaScript:构造函数&面向对象
JavaScript:构造函数&面向对象
61 2
|
JavaScript 前端开发
学习TypeScrip7(内置对象)
如果我们不指定返回的类型TS是推断不出来返回的是什么类型
86 0
学习TypeScrip7(内置对象)
|
前端开发 JavaScript
web前端-JavaScript构造函数创建对象
web前端-JavaScript构造函数创建对象
115 0
|
Web App开发 JavaScript 前端开发
原型(prototype) 和 原型链(__proto__) —— 别再为 JavaScript 的原型苦恼了
原型(prototype) 和 原型链(__proto__) —— 别再为 JavaScript 的原型苦恼了
108 0
|
JavaScript 前端开发
【JavaScript】面向对象——原型与原型链(详解)
【JavaScript】面向对象——原型与原型链(详解)
156 0
【JavaScript】面向对象——原型与原型链(详解)
|
JavaScript 前端开发
【JavaScript】24_面向对象中的方法和构造函数
# 4、方法 ```html <script> class Person{ name = "孙悟空" // sayHello = function(){ // } // 添加方法的一种方式 sayHello(){ console.log('大家好,我是' + this.name) } // 添加方法(实例方法) 实例方法中this就是当前实例 static test
88 0
|
JavaScript 前端开发
关于JavaScript面向对象中构造函数和原型对象的学习与理解
面向对象就是把需要解决的问题分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述每个对象在解决问题中的行为,面向对象的核心是对象。
118 0
关于JavaScript面向对象中构造函数和原型对象的学习与理解