標籤:style blog class code java c
上文講述過js實現物件導向,一定是可以實現繼承的效果的。雖然說很多的js架構都協助我們實現了繼承的功能,或者說在日常的工作和學習中我們壓根就用不到js的繼承,但是我們還是需要瞭解一下js中繼承,以方便我們閱讀架構中的繼承是如何?的。在下面的文章中我會給大家類比一下js中繼承的實現。
先來看一下下面建立對象的一種方式:
/* * 對象工廠 */function objectFactory(jsonObj){function objectEntity(){}if(typeof jsonObj == "object"){for(var index in jsonObj){objectEntity.prototype[index] = jsonObj[index]; }}return objectEntity;}var Person = objectFactory({pname:‘andy‘,sex:‘man‘});var person = new Person();console.info(person+"--"+Person);// [object Object] -- function objectEntity(){}console.info(person.pname);console.info(person.sex); objectFactory接受的是一個json對象jsonObj作為參數,在這個函數內部建立了一個函數objectEntity,然後就判斷輸入的jsonObj
是否是物件類型,如果是那麼就遍曆這個json對象,然後把遍曆出來的每個值都附加objectEntity的原型上面,請注意,下面返回的
就是objectEntity(可以參考上節中的js閉包概念),也就是說Person指向的就是objectEntity,那麼Person的原型上面自然的就有了
pname,sex等屬性。
如果上述能夠理解的話,我們就可以進行下一步的繼承的實現(類似於很多架構中的繼承底層實現)
/* * 繼承 */function inherit(obj,prop){function f(){}if(typeof obj=="object"){for(var index in obj){f.prototype[index] = obj[index]; }}else{f.prototype = obj.prototype;for(var index in prop){f.prototype[index] = prop[index]; }}return f;}var Animal = inherit({type:‘animal‘,name:‘animal‘,jump:‘jump‘});var Dog = inherit(Animal,{name:‘i am a dog‘,jump:‘dog jumpping‘});var dog = new Dog;console.info(dog.type);console.info(dog.name);
在這裡就不再對inherit這個函數進行詳細的解釋,讀者可以自行分析,在這裡Dog 繼承了Animal,那麼Dog建立出來的對象dog自然的就有了Animal中的各個屬性。