在原型變成思想中,類並不是必須的,對象並不一定要從類中創建,一個對象通過克隆另一個對象而得到。
1、原型模式實現的關鍵是語言本身提供了clone方法,es5提供了Object.creat方法。如下:
var Plane=function(){
this.blood=1000;
this.attackLevel=1;
this.defenseLebel=1;
}
varplane =new Plane();
plane.blood=500;
plane.attackLevel=10;
plane.defenseLebel=7;
var clonePlane = Object.create(plane);
console.log(clonePlane);
輸出:
Plane {}
PlaneattackLevel:10
blood:500
defenseLebel:7
2、原型鏈
舉一個例子,
Object是Animal的原型,而Animal是Dog的原型,他們之間形成了一個原型鏈。
這個原型鏈很有用,如果我們調用Dog的某個方法,如果Dog沒有,他就會委託給他的原型Animal,,如果Animal也沒有這個屬性,Animal就會順着原型鏈委託給原型Object對象,這樣一來就能形成繼承的效果,看起來像是Animal是Dog的“父類”,而Object是Animal的“父類”。
所有原型編程一個重要特性是,當無法響應某個請求時,會把請求委託給自己的原型。
原型編程有以下的規則:
l 所有數據都是對象。
l 要得到一個對象,不是實例化類,而是找到一個對象作爲原型並克隆它。
l 對象會記住他的原型。
l 如果對象無法響應某個請求,他會把這個請求委託給自己的原型。
3、javascript的根對象是Object.prototype,Object.prototype是一個空對象,js中遇到的所有對象都是從Object.prototype克隆而來的。
4、克隆對象的方式:
l varobj1=new Object();
l varobj2={};