所谓封装,就是把抽象出的属性和对属性的操作写到类的定义中,称为封装。
js中实现封装主要有两种封装(公开,私有)
function Person(name,sal){ this.name=name; //公开 var sal=sal;//私有 this.showInfo=function(){ //公开 window.alert(this.name+” ”+sal); } showInfo2(){ //把函数私有化. window.alert(“你好”+this.name+” ”+sal) } }
A.构造函数方式与原型方式给对象添加方法的区别
1 //通过构造函数方式给对象添加方法 2 function Dog(name){ 3 this.name=name; 4 this.shout=function(){ 5 window.alert("小狗尖叫"+this.name); 6 } 7 } 8 var dog1=new Dog("aa"); 9 var dog2=new Dog("bb"); 10 if(dog1.shout==dog2.shout){ 11 window.alert("相等"); 12 }else{ 13 window.alert("不相等"); 14 } 15 16 //会输出“不相等”
1 //通过原型方式给对象添加方法 2 function Dog(name){ 3 this.name=name; 4 } 5 Dog.prototype.shout=function(){ 6 window.alert("小狗尖叫"+this.name); 7 } 8 var dog1=new Dog("aa"); 9 var dog2=new Dog("bb"); 10 if(dog1.shout==dog2.shout){ 11 window.alert("相等"); 12 }else{ 13 window.alert("不相等"); 14 } 15 16 //会输出“相等”
说明通过构造函数来分配成员方法,给每个对象分配一份独立的代码。这样的弊端就是如果对象实例有很多,那函数的资源占用就会很大,而且有可能造成内存泄漏。而原型法是大家共享同一份代码,就不会有那种弊端。
1.通过原型法分配的函数是所有对象共享的;
2.通过原型法分配的属性是独立的;
3.如果希望所有的对象使用同一个函数,最好实用原型法添加方法,这样比较节省内存。
4.
function Person(){ } // 创建对象 var p1=new Person(); p1.say(); // 这时用原型法分配 Person.prototype.say=function(){ window.alert("ok"); } //这样执行会报错。p1.say()必须写到 prototype.say下方。 //说明 prototype方式是后置绑定
相关阅读:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html
时间: 2024-10-25 20:14:43