阮一峰的网络日志

1.生成实例对象的原始模式

 var People = {
name : '',
age : ''
}

根据这个原型对象生成两个实例对象

 var people1 = {};
people1.name = 'jack';
people1.age = 18;
var people2 = {};
people2.name = 'lucy';
people2.age = 17;

这即为简单的封装,把两个属性封装在一个对象里面

缺点:
1.如生成多个实例,写起来麻烦。
2.实例与原型之间看不出联系

2.原始模式改进

function People(name,age) {
return {
name:name,
age:age
}
}

然后生成实例,等于调用函数

 var people1 = People('jack',18);
var people2 = People('lucy',17)

缺点:people1与people2之间没有内在联系,不能反映出它们是一个原型对象的实例

3.构造函数模式

所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

function People(name,age) {
this.name = name;
this.age = age
}

生成实例对象

var people1 = new People('jack',18);
var people2 = new People('lucy',17);
alert(people1.name); //jack
alert(people1.age); //18

people1和people2会自动含有一个constructor属性,指向它们的构造函数

alert(people1.constructor == People); //true
alert(people2.constructor == People); //true

4.构造函数模式的问题

构造函数存在一个浪费内存的问题

function People(name,age) {
this.name = name;
this.age = age;
this.job = 'web';
this.say = function(){
alert('你好')
}
}

生成实例

var people1 = new People('jack',18);
var people2 = new People('lucy',17);
alert(people1.job); //web
people1.say(); //你好

这样有一个弊端,对于每一个实例对象,job属性和say()方法都是一样的内容,每一次生成一个实例,都是重复的内容,多占内存。

alert(people1.say == people2.say); //false

5.Prototype模式

Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。

function People(name,age) {
this.name = name;
this.age = age
}
People.prototype.job = 'web';
People.prototype.say = function(){
alert('你好')
}

生成实例

var people1 = new People('jack',18);
var people2 = new People('lucy',17);
alert(people1.job); //web
people1.say(); //你好

这时所有的job属性和say()方法都是同一个内存地址

JavaScript面向对象(封装)的更多相关文章

  1. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  2. JavaScript面向对象--封装

    一.封装的概念 面向对象的类包括两大成员,一种是暴露给外部的接口,另一种是只在类内部才能访问的私有属性.在这个类被实例化成对象后,用户只能通过操作给定的接口来访问该类内部的私有属性,这就被称为面向对象 ...

  3. javascript --- 面向对象 --- 封装

    javascript中有原型对象和实例对象 如有疑问请参考:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_enca ...

  4. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  5. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

  6. 【转】Javascript 面向对象编程(一):封装

    原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript ...

  7. Javascript 面向对象编程(一):封装 by 阮一峰

    <Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Java ...

  8. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  9. Javascript 面向对象编程—封装

      前  言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...

  10. Javascript 面向对象编程—继承和封装

      前  言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...

随机推荐

  1. C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点

    C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点   第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它 ...

  2. Linux基础之命令练习Day4-fdisk,mkfs,mlabel,mount,umount,mkswap,swapon,dd,top,free,ps,kill,rpm,yum,make

    一. 硬盘分区.格式化及文件系统的管理 1. 在Linux系统中,一切皆文件.每个设备都被当作一个文件来对待. 常见的存储设备在Linux系统中的文件名如下表所示: 2. 对硬盘进行分区有以下优点: ...

  3. Selenium_Python接口-Alert类

    Alert类的路径:from selenium.webdriver.common.alert import Alert Alert类主要是一些对弹出框的操作,如:获取属性.确认.取消等 接口内容: f ...

  4. tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.

    部署项目时候,发现启动特别慢,要等好几分钟,这不正常啊.然后每次部署都停留在 At least one JAR was scanned for TLDs yet contained no TLDs. ...

  5. yii2.0里别名的定义

    别名用来表示文件路径和URL,为了避免在代码中硬编码一些绝对路径和URL,一个别名必须以‘@’符开头. 用Yii::setAlias()的方法来设置: //文件别名 Yii::setAlias('@f ...

  6. Stage划分和Task最佳位置算法源码彻底解密

    本课主题 Job Stage 划分算法解密 Task 最佳位置算法实现解密 引言 作业调度的划分算法以及 Task 的最佳计算位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心 ...

  7. CSV 文件读写

    转自:http://www.cnblogs.com/Clin/archive/2013/03/14/2959022.html public class CSVFileHelper { /// < ...

  8. 配置管理SVN软件具体操作

    配置管理(SVN) CM:configuration management  配置管理人员 什么是SVN SVN --Subversion --是一个开放源代码的版本控制系统 --时下流行的有SVN和 ...

  9. UID卡修改&UID锁死修复

    好久没发RFID类文章,最近有小伙伴问到UID卡的问题,在这里就写一写吧. 首先是UID修改的问题,只要卡是UID卡,就都可以修改UID,首先读卡器连接电脑,卡片放到读卡器上. 然后我们要用一个工具, ...

  10. OC NSMutableString的使用

    #pragma mark 可变字符串的创建 void stringCreate() { // 预先分配10个字数的存储空间 NSMutableString *str = [[NSMutableStri ...