首页
关联三种子类型
关联三种子类型
版权声明:本文为原创内容,转载请声明出处。
原文地址:http://www.excelib.com/article/248/show

ECMAScript中的三种子类本来是相互独立、各有各的使用环境的,但是有一些情况下需要操作不属于自己所对应环境的子类型,这时就需要使用一些技巧来实现了。

为了描述方便,我们将function作为对象使用记作OObject),作为函数使用记作FFunction),创建出来的对象实例记作IInstance),他们所对应的子类型分别记作opobject  property)、vvariables)和ipinstance  property),他们之间的调用方法如下表所示

4-3


op

v

ip

O

直接调用

在函数中关联到对象属性

不可调用

F

使用function对象调用

直接调用

不可调用

I

使用function对象调用

在函数中关联到实例属性

直接调用

这里的纵向表头表示function对象不同的用法,横向表头表示各种子类型,表格的主体表示在function相应用法中调用各种子类型的方法。因为function创建出来的实例对象在创建之前还不存在,所以function作为方法和作为对象使用时是无法调用function创建出来的实例对象的属性(ip)的。调用参数可以在函数中将变量关联到相应属性,调用function作为对象时的属性可以直接使用function对象来调用,我们看下面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function log(msg){
     console.log(msg); 
function Bird(){
     var name = "kitty";
     var type = "pigeon";
     //将局部变量name关联到创建出来对象的getName、setName属性方法     
     this.getName = function () {
         return name;
     }      
     this.setName = function (n) {
         name = n;
    }     
    //将局部变量type关联到Bird对象的getType属性方法     
    Bird.getType = function () {
             return type;     
    }     
    //在业务处理中调用Bird对象的color属性     
    log(Bird.color);    //white,F调用op 
     
Bird.color="white"
//在创建出的实例对象中调用Bird对象的color属性 
Bird.prototype.getColor = function () {
     return Bird.color; 
var bird = new Bird(); 
log(bird.getColor());   //white,I调用op 
log(bird.getName());   //kitty,I调用v 
log(Bird.getType());   //pigeon,O调用v
bird.setName("petter"); //I调用v
log(bird.getName());   //petter,I调用v

例子中以及做了详细的注释,学生就不再详细解释了,通过这个例子我们就清楚了三种子类型在不同环境(用法)中相互调用的方式了。