JavaScript面向对象(封装)
阮一峰的网络日志
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面向对象(封装)的更多相关文章
- Javascript面向对象(封装、继承)
Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...
- JavaScript面向对象--封装
一.封装的概念 面向对象的类包括两大成员,一种是暴露给外部的接口,另一种是只在类内部才能访问的私有属性.在这个类被实例化成对象后,用户只能通过操作给定的接口来访问该类内部的私有属性,这就被称为面向对象 ...
- javascript --- 面向对象 --- 封装
javascript中有原型对象和实例对象 如有疑问请参考:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_enca ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- javascript面向对象(一):封装
本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...
- 【转】Javascript 面向对象编程(一):封装
原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript ...
- Javascript 面向对象编程(一):封装 by 阮一峰
<Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Java ...
- JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)
本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...
- Javascript 面向对象编程—封装
前 言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...
- Javascript 面向对象编程—继承和封装
前 言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...
随机推荐
- JS封装继承函数
function extend(child,parent){ var F=function(){} F.prototype=parent.prototype; child.prototype=new ...
- 计算(calc.cpp)
计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...
- MySQL基础数据类型
一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...
- siriWave.js的demo
demo.html <style>body { background: #000; }</style> <script src="../siriwave.js& ...
- QQ 聊天机器人小薇 2.0.0 发布!
本次发布主要加入了支持讨论组聊天,并增强了稳定性.另外,官方小薇 QQ 机器人已经下线,大家要体验的话请 自建私服~ 简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务, ...
- 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )
Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...
- Raspberry U盘操作
项目系统要求的对U盘分区,分出系统盘与用户盘.这就有了今天的这个总结了: 1.输入命令“fdisk -l”查看设备挂载的位置,因为这个在设备挂载的时候有可能会发生变化. 假设设备挂载到了 /dev/s ...
- icon-font 字体图标的引用
1.font-class引用 font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题. 与unicode使用方式相比,具有如下特点: 兼容性良好, ...
- ubuntu18.04安装谷歌浏览器
sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ wget -q ...
- M-wordL-图
典型的需要使用图模型 将start 和 end 以及字典一同构建成图,然后探究从start到end的最短路径