標籤:tor 下一步 建立對象 bsp 功能 實現繼承 prot div 閉包概念
上文講述過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中的各個屬性。
js 繼承概述