JS原型鏈繼承

繼承普通版

繼承邏輯上都差很少,普通版調用方式比較繁瑣,不利於反覆大量的使用;

(function (){

    //建立一我的員類

    function Person(name){

        this.name = name;

   }

    //建立教師類

    function Teacher(name,books){

        //call方法能夠將一個函數的對象上下文從初始化變成由this來決定;

        //調用person的構造函數,由於person沒用new,因此他是個空對象;

        //至關於Java中的super函數;

        Person.call(this,name);

        this.books = books;

   }

    //使老師類繼承人員類;

    Teacher.prototype = new Person();

    Teacher.prototype.constructor = Teacher;

    Teacher.prototype.getBook = function(){

            return this.name + ' ' + this.books;

       }

    //測試

    var victor = new Teacher('victor','chinese');

    alert(victor.getBook());

})()

繼承升級版

(function (){
            //建立一我的員類
            function Person(name){
                this.name = name;
            }
            //建立教師類
            function Teacher(name,books){
                //call方法能夠將一個函數的對象上下文從初始化變成由this來決定;
                //調用person的構造函數,由於person沒用new,因此他是個空對象;
                //至關於Java中的super函數;
                Person.call(this,name);
                this.books = books;
            }
            /*建立Extend函數是爲了程序中全部的繼承操做*/
            function extend(subClass,superClass){
                //1.讓子類的原型類屬性等於父類的原型屬性
                //初始化一箇中間空對象,爲了轉換主父類關係
                var F = function(){};
                F.prototype = superClass.prototype;
                //2.讓子類繼承F;
                subClass.prototype = new F();
                subClass.prototype.constructor = subClass;
                //3.爲子類增長屬性superClass
                subClass.superClass = superClass.prototype;
                //4.增長一個保險,就算是原型類的超類(object)那麼也要把你的構造函數級別降下來
                if ( superClass.prototype.constructor == Object.prototype.constructor ) {//Object爲超類,首字母須要大寫
                    superClass.prototype.constructor = superClass;
                }
            }

            //測試
            function Author(name,books){
                Author.superClass.constructor.call(this,name);
                this.books = books;
                this.getBook = function(){
                    return this.name + ',' + this.books;
                }
            }

            //繼承
            extend(Author,Person);
            var victor = new Author('victor','javascript');
            alert(victor.getBook());

    })()
相關文章
相關標籤/搜索