js 实现封装

来源:互联网 发布:linux运维常用脚本 编辑:程序博客网 时间:2024/05/17 12:48
function Person() {
   this.name = "jee";
   this.age = 25;
   this.getName = function() {
      return this.name;
   }
}
 
var person = new Person();
alert(person.age);
alert(person.getName());

首先  
构造函数中这段代码
this.name = "jee";
this.age = 25;
这样的话,每一个对象new出来 name 和 age 都是 “jee”  25
那么改进后代码
function Person(name,age) {
   this.name = name;
   this.age = age;
   this.getName = function() {
      return this.name;
   }
}
 
var p1 = new Person("xiaoqiang",1);
alert(p1.age); //1
alert(p1.name);//xiaoqiang
alert(p1.getName());//xiaoqiang
 
var p2 = new Person("zhangsan",2);
alert(p2.age);//2
alert(p2.name);//zhangsan
alert(p2.getName());//zhangsan
那么 接下来 再看 这个方法
this.getName = function() {
      return this.name;
   }
这样写是没问题的 但是 有一点缺陷 就是 每个对象都维护相同的方法实例 而其实它们可以共享此方法 而不必每个对象都生成此示例 
在java语言中 面向对象的思想中 有一条 “继承” 既然此方法对于每个对象来说是公用的 那么可以在它的父类中实现 
在javascript中继承 是基于原型对象的继承 在原型对象中实现此方法,那么每个对象调用此方法时 
首先查看自己是否有此方法 如果有 调用自己的方法 如果没有 去原型对象中查询 调用原型对象的方法 
是不是和java中的继承差不多呢?呵呵 看下 改造后的代码
function Person(name,age) {
   this.name = name;
   this.age = age;
}
Person.prototype.getName = function(){
   return this.name;
}
var p1 = new Person("xiaoqiang",1);
alert(p1.age); //1
alert(p1.name);//xiaoqiang
alert(p1.getName());//xiaoqiang
 
var p2 = new Person("zhangsan",2);
alert(p2.age);//2
alert(p2.name);//zhangsan
alert(p2.getName());//zhangsan
 
另外 还有对象字面量的形式构造对象
var p1 ={
           name:"zhangsan",
           age:1,
           getName:function(){
               return this.name;
           }
         };
alert(p1.name);//zhangsan
alert(p1.age);//1
alert(p1.getName());//zhangsan
 
在这里鉴于篇幅 就不多讲了
如果lz想详细了解面向对象的javascript编程 可以建议你看下这两本书:<<javascript 权威指南>>,<<javascript高级程序设计>>
0 0
原创粉丝点击