码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-06-12 14:47:28      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

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

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

 

 

 

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

标签:

原文地址:http://www.cnblogs.com/hezhi/p/4571377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!