继承的两种方式,对象冒充和原型方式,就是不理解?
什么是对象冒充,这个含义我一直不明白,为什么叫冒充呢?
另外,什么是原型方式,是不是用prototype属性增加函数,就是原型方式呢?

解决方案 »

  1.   

    对象冒充是一个很有用的概念
    原理在于javascript的this链
    比如
    function Father() {
        this.name = 'father';
        Son();
    }function Son() {
        alert(this.name);
    }你会很惊讶的看到,Son中的this指向了Father.这个跟java内部类的机制是一致的。即内部函数可以获得外部函数的变量。那么反过来会怎么样?
    function Father() {
        this.name = 'father';
    }function Son() {
        Father();
    }alert(new Son().name);
    Son的name为undefined,无法取得。但是,有办法把内部域绑定到外部上面
    看下面代码
    function Father() {
        this.name = 'father';
    }function Son() {
        this.init = Father;
        this.init();
        delete this.init;
    }alert(new Son().name);首先分析下this.init = Father;
    这句就是把父类函数绑定到this.init上面,
    接下来这句比较关键this.init();
    这句遵循了一个this关系链
    首先,Father中的this.name连接到外部,被this.init接收到。
    使得Father中的this.name的this等于this.init中的this.
    效果就如同与在Son中执行了this.name = 'Father';
    故将此继承方法命名为对象冒充
      

  2.   

    function Father() {
        this.name = 'father';
    }function Son() {
    }Son.prototype = new Father();alert(new Son().name);这种继承方法叫原型
    原型继承有个好处就是 var son = new Son();
    alert(son instanceof Father);// 返回true而对象冒充则做不到这点。