JS Prototype 原型
prototype:原型:如果对象B是建立在对象A的基础上,那么A为B的原型,类似Java里面的父类和子类的关系,B不仅可以使用A定义的属性和方法,还可以进行额外的功能扩展,经常应用在js框架里面。
定义基础对象:
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();
效果:
JS 实现对象继承
实现:继承的原理通过原型实现,每个Javascript对象都具备prototype属性。
测试代码
<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>
分析:
baseClass类为extendClass类的原型,extendClass可以使用所有的原型的方法,实现功能和属性扩展(类似java里面的继承)如果方法名一致,js引擎扫描从自身扫描开始,如果扫描到则不进行向下扫描(原型链工作原理)