JavaScript封装

1.js是一个ob(object-base)类型的语言,而不是真正意义上的面向对象编程,因为他没有class的思想

2.最基础的原型对象生成
  1. var cat={
  2. name:'',
  3. color:''
  4. }
  5. var cat1={};
  6. var cat2={};
  7. cat1.name='大毛';
  8. cat1.color='white';
  9. cat.name='ermao';
  10. cat2.color='red';
上述就是最简单的封装,但是这样书写起来过于麻烦,特别是在实例多个对象的时候。
3.改进
  1. var cat=function(name,color){
  2. return{
  3.        name:name,
      1. color:color
    1. }
  4. }
  5. var cat1=cat('damao','white');
  6. var cat2=cat('ermao','red');
 
这样写改进了代码的精简度,但是还是没有体现两个实例之间的关系
 
4.构造函数
  1.  
  2. //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法
     //当对象被实例化后,构造函数会立即执行它所包含的任何代码
  3. function Cat(name,color){
  4. //特权属性(共有属性)
  5.     this.name=name;//只有被实例化后的实例才能使用
  6.     this.color=color;
  7.      
  8.       //私有属性
  9.      var name='hehe';
  10.       //私有方法
  11.       function sayname(){
  12.        alert(that.name)
  13. }
  14.     //特权方法
  15.     this.sayAge=function(){
  16.     alert(name);//共有方法可以访问到私有成员,这是因为他把this传入进来了
    1. }
    2.   //私有变量和私有方法在构造方法构造的每一个实例中都有,所以实例越多占用内存则越多
  17.   }
  18. var cat1 = new Cat("大毛","黄色");
  19.   var cat2 = new Cat("二毛","黑色");
  20.   alert(cat1.name); // 大毛
  21.   alert(cat1.color); // 黄色
注:this指向的是调用他的对象
此时cat1,cat2会拥有一个constructor属性,指向他的构造函数
即cat1.constructor==cat;
cat2.constructor==cat;
为了避免实例过多占用内存过大,js提供了prototype属性,比如
cat.prototype.type='猫科动物’;
cat.prtotype.eat=function(){
};这样就保存了那些变量和属性
这样实例化两个对象cat1.eat==cat2.eat;
posted @ 2017-03-07 19:12  老夫代码复制粘贴  阅读(256)  评论(0)    收藏  举报