1. 程式人生 > >經典面試題:js繼承方式下

經典面試題:js繼承方式下

deep 今天 typeof extend fun col const 繼承 uber

上一篇講解了構造函數的繼承方式,今天來講非構造函數的繼承模式。

一、object()方法

json格式的發明人Douglas Crockford,提出了一個object()函數,可以做到這一點。

function object(o) {    
    function F() {}    
    F.prototype = o;    
    return new F();  
}

二、淺拷貝

除了使用"prototype鏈"以外,還有另一種思路:把父對象的屬性,全部拷貝給子對象,也能實現繼承。

下面這個函數,就是在做拷貝:

function extendCopy(p) {    
    
var c = {};     for(var i in p) {       c[i] = p[i];     }     c.uber = p;     return c;   }

三、深拷貝

所謂"深拷貝",就是能夠實現真正意義上的數組和對象的拷貝。它的實現並不難,只要遞歸調用"淺拷貝"就行了。

function deepCopy(p, c) {    
    var c = c || {};    
    for(var i in p) {      
        if(typeof p[i] === ‘object‘) {        
            c[i] 
= (p[i].constructor === Array) ? [] : {};         deepCopy(p[i], c[i]);       } else {          c[i] = p[i];       }     }     return c;   }

目前,jQuery庫使用的就是這種繼承方法。

經典面試題:js繼承方式下