小菜AS3之路

2012.2.17
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JS的Call方法

Posted on 2012-03-01 13:53  枫雨  阅读(1681)  评论(0)    收藏  举报
/**
    call的参数是一个对象的实例
    call的参数是一个函数,即一个对象
    创建一个基类对象作为子类原型的原型  共享基类prototype的方法
    
    为函数动态地增加属性、方法
    为函数prototype的属性添加方法
*/
    this.name = "window";
    function Class1(){
        this.name = "class1";     //设置对象名----若Call调用后在给实例化对象赋值!!
        this.showTxt = function(){alert(this.name)}
    } 
    Class1.prototype.say = function(){
        alert(this.name);
    }
    Class1.hello = function(){
        alert('Hello');
    }
    
    
    function Class2(){
        Class1.call(this);       //call对象冒充继承属性,方法
        this.name = "class2";    //由Class2创建实例后实例对象的name值,并不是Class2.name
    }
    Class2.prototype = new Class1();
    Class2.prototype.say = function(){
        alert("a");
    }
    
    var cls1 = new Class1();
    var cls2 = new Class2();
    
    
    //cls2.say();    
    //Class1.showTxt();             //Class1此时是一个function对象的引用
    //cls1.showTxt.call(cls2);    //实例对象的方法调用Call
    //cls1.showTxt.call(Class2);
    /**创建一个基类的对象作为子类原型的原型----->子类对象直接调用基类prototype的方法
     * 构造函数创建对象属性  -------> call对象冒充继承属性,方法
     * 原型链创建对象方法
     
*/
    for(var item in Class1){
        document.write(typeof item + ";" + item);
    }