JavaScript面向對象編程-繼承(四)

一些面嚮對象語言中支持多繼承,在JavaScript也能實現多繼承,可是有一些侷限,由於在JavaScript中繼承是依賴原型prototype鏈實現的,只有一條原型鏈,因此理論上是不能繼承多個父類的。可是JavaScript很靈活,經過一些技巧方法能夠繼承多個對象的屬性來實現相似的多繼承。javascript

單繼承

繼承單對象的extend方法:css

//單繼承  屬性複製
var extend = function (target,source) {
    //遍歷源對象中的屬性
    for(var property in source){
        //將源對象中的屬性複製到目標對象中
        target[property] = source[property];
    }
    //返回目標對象
    return target;
};

單繼承的測試代碼html

//測試代碼
var book ={
    name:'javascript',
    alike:['css','html5','js']
}
var anotherBook = {
    color :'blue'
}
extend(anotherBook,book);
console.log(anotherBook.name);//javascript
console.log(anotherBook.alike);//[ 'css', 'html5', 'js' ]
anotherBook.alike.push('ajax');
anotherBook.name = '設計模式';
console.log(anotherBook.name);//設計模式
console.log(anotherBook.alike);//[ 'css', 'html5', 'js', 'ajax' ]
console.log(book.name);//javascript
console.log(book.alike);//[ 'css', 'html5', 'js', 'ajax' ]

上面的方法能夠實現對一個對象屬性的複製繼承,當傳遞多個對象時,便可實現多繼承。html5

多繼承

//多繼承  屬性複製
var mix = function () {
    var i =1,//從第二個參數起爲被繼承的對象
        len =arguments.length,//獲取參數長度
        target = arguments[0], //第一個對象爲目標對象
        arg;//緩存參數對象
    for(;i<len;i++){
        //緩存當前對象
        arg = arguments[i];
        //遍歷被繼承對象中的屬性
        for(var property in arg){
            //將被繼承對象的屬性複製到目標對象中
            target[property] = arg[property];
        }
    }
    //返回目標對象
    return target;
};

mix方法的做用是將傳入的多個對象的屬性複製到源對象中,這樣便可實現對多個對象的屬性的繼承。另外當使用的時候須要傳入目標對象(第一個參數-須要繼承的對象)時,能夠將它綁定到原生對象Object上,這樣全部的對象均可以擁有這個方法。這樣就能夠在對象上直接調用。java

Object.property.mix = function () {
    var i=0,//從第一個參數起爲被繼承的對象
        len =arguments.length,//獲取參數長度
        arg;//緩存參數對象
    for(;i<len;i++){
        //緩存當前對象
        arg = arguments[i];
        //遍歷被繼承對象中的屬性
        for(var property in arg){
            this[property] = arg[property];
        }
    }
}
相關文章
相關標籤/搜索