JavaScript封装
1.js是一个ob(object-base)类型的语言,而不是真正意义上的面向对象编程,因为他没有class的思想
2.最基础的原型对象生成
var cat={name:'',color:''}var cat1={};var cat2={};- cat1.name='大毛';
- cat1.color='white';
- cat.name='ermao';
- cat2.color='red';
上述就是最简单的封装,但是这样书写起来过于麻烦,特别是在实例多个对象的时候。
3.改进
var cat=function(name,color){return{name:name,- color:color
}}var cat1=cat('damao','white');var cat2=cat('ermao','red');
这样写改进了代码的精简度,但是还是没有体现两个实例之间的关系
4.构造函数
//使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法
//当对象被实例化后,构造函数会立即执行它所包含的任何代码function Cat(name,color){//特权属性(共有属性)this.name=name;//只有被实例化后的实例才能使用this.color=color;//私有属性var name='hehe';//私有方法function sayname(){alert(that.name)- }
- //特权方法
- this.sayAge=function(){
- alert(name);//共有方法可以访问到私有成员,这是因为他把this传入进来了
- }
- //私有变量和私有方法在构造方法构造的每一个实例中都有,所以实例越多占用内存则越多
}var cat1 = new Cat("大毛","黄色");var cat2 = new Cat("二毛","黑色");alert(cat1.name); // 大毛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;

浙公网安备 33010602011771号