prototype:原型:若是对象B是创建在对象A的基础上,那么A为B的原型,相似Java里面的父类和子类的关系,B不只能够使用A定义的属性和方法,还能够进行额外的功能扩展,常常应用在js框架里面。java
定义基础对象:框架
function People(name){ //对象属性 this.name=name; //对象方法:相似java中的public方法(只能由对象实例调用) this.show=function(){ console.log(name+"is a common person......"); }; } //对象方法:相似java中的静态方法,只能由类自己调用 People.run = function(){ console.log("People can run................."); } //定义对象的原型方法,相似非静态方法 People.prototype.showSelf = function(){ //原型方法 console.log("I am a optimistic people......."); } //对象实例化测试 var people=new People("Squirrel"); People.run(); //调用类方法 people.show(); people.showSelf();
效果:测试
实现:继承的原理经过原型实现,每一个Javascript对象都具有prototype属性。ui
测试代码this
<script> var baseClass = function(){ //父类 this.name="baseClass:name--->baseClass"; this.showMsg = function(){ console.log("baseClass::showMsg"); } } var extendClass = function(){ //子类 this.age = "extendClass:age--->20"; this.showMsg = function(){ console.log("extendClass::showMsg"); }; } extendClass.prototype = new baseClass(); var instance = new extendClass(); instance.showMsg(); //相似方法被重写 console.log(instance.name) console.log(instance.age) </script>
分析:prototype
baseClass类为extendClass类的原型,extendClass能够使用全部的原型的方法,实现功能和属性扩展(相似java里面的继承)若是方法名一致,js引擎扫描从自身扫描开始,若是扫描到则不进行向下扫描(原型链工做原理)3d