經典面試題:js繼承方式下
阿新 • • 發佈:2017-10-16
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繼承方式下