java学习

java学习

 

JavaScript原型和继承

(function (){
 
 function Person(){
  this.getAge=function (age){
   alert(age);
  }
  
 }
 //让此类的所有对象有name属性,showName方法
 Person.prototype.name="yjw";
 Person.prototype.showName=function(){
  alert(this.name);
 }
// new Person().showName();
  
 
 var v={};
 //让空对象v继承Person,含有Person的所有属性和方法
 v.__proto__=new Person();
 v.__proto__.constructor=v;
 v.getAge(1);
 v.showName();
 
 
})()
(function (){
 //创建一个人员类
 function Person(n){
  this.name=n;
  this.getAge=function (age){
   alert(age);
  }
 }
 //创建教师类
 function Teacher(name,books){
  //call方法可以将一个函数的对象上下文,从初始化变成由this来决定
  //调用Person的构造函数,
  Person.call(this, name);//this就是person的this,name属性就是person的属性
  this.books=books;
 }
 //让教师类继承人员类
 Teacher.prototype=new Person();
 Teacher.prototype.constructor=Teacher;//教师的构造方法还是使用教师自己的构造方法
 Teacher.prototype.getBook = function(){//给教师类的原型添加方法
  return this.name+"  "+this.books;
 }
 var jim = new Teacher("jim","extjs");
// alert(jim.getBook());
 //jim.getAge(2);
 function extend(subClass,superClass){
  //1.让子类原型类属性等于父类的原型属性,初始化一个中间空对象,为了转换主父类关系
  var f = function(){};
  f.prototype=superClass.prototype;
  //2.让子类继承f
  subClass.prototype=new f();
  subClass.prototype.constructor=subClass;
  //3.为子类增加属性,继承父类的原型对象
  subClass.fuLei=superClass.prototype;
  //4.增加一个保险,就算父类的原型类是超类object,也要把父类的构造函数的级别降下来
  if(superClass.prototype.constructor==Object.prototype.constructor){
   superClass.prototype.constructor=superClass;
  }
 }
 function Student(name,books){
  Student.fuLei.constructor.call(this,name);
  this.books=books;
  this.getBooks=function(){
   return this.name+"  "+this.books;
  }
 }
 extend(Student, Person);
 var s = new Student("s","a");
 alert(s.getBooks());
 s.getAge(2);
})()

posted on 2016-06-21 16:13 杨军威 阅读(101) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜