【原生js】js面向对象三大特征之封装笔记

所谓封装,就是把抽象出的属性和对属性的操作写到类的定义中,称为封装。

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

 

 

 

你可能感兴趣的:(面向对象)