在原型变成思想中,类并不是必须的,对象并不一定要从类中创建,一个对象通过克隆另一个对象而得到。
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={};