JavaScript中利用构造器函数模拟类的方法


Posted in Javascript onFebruary 16, 2017

前言

本文小编带大家一起学习的是在 JavaScript 中使用构造器函数(construcor function)模拟类。下面话不多说,感兴趣的朋友们下面来一起看看吧。

构造器函数简介

你可以使用 ES6 的 class 关键字来实现类,不过我建议你使用传统的构造器函数来模拟类,因为这样可以给人一种你是个 JavaScript 老手的错觉,哈哈!

什么是构造器函数?构造器函数是编写对象的方法之一。一般情况下,你可以这样编写一个对象:

var obj = { a:1, b:2 };

但也可以使用构造器函数来编写对象:

function Obj(a, b){
 this.a = a;
 this.b = b;
}
var obj = new Obj(1, 2); //obj 等价于 { a:1, b:2 }

使用构造器函数的好处在于可以传递参数。构造器函数通常首字母大写,而且需要使用 new 关键词来调用。在 JavaScript 中是没有类的,利用构造器函数我们可以模拟一个类。

使用构造器函数编写栈类

了解了构造器函数,我们使用它编写一个迷你的栈类,下面就是实现代码:

Stack.js

function Stack() {
 // 私有变量 items,用于记录数组,对象不能直接操作
 var items = [];
 // 类方法 push,在数组末尾添加项,对象可以直接调用
 this.push = function (element) {
 items.push(element);
 };
 // 删除并返回数组末尾的项
 this.pop = function () {
 return items.pop();
 };
}

上述栈类中,有个私有变量 items ,为何它就不能直接操作呢?为何挂在 this 上的方法可以直接调用?因为 new 操作符会将构造器函数中的 this 指向生成的对象,也就是说挂在 this 上的方法或属性将来会成为生成对象的方法或属性,所以可以直接调用。而 items 则是函数内部的一个局部变量,它在函数外部是不可见的,生成对象只能通过调用自身的方法,沿着作用域链来操作 items。

var stack = new Stack();
// stack 对象不能直接操作items,结果是 undefined
console.log(stack.items) 
 
// stack 对象可以直接操作构造器函数中挂在 this 上的属性和方法
stack.push(1);
// 打印了1
console.log(stack.pop())

如果你不熟悉 JavaScript ,那么你应该先学习一下 JavaScript 作用域、this 和 new 操作符的相关知识。推荐阅读参考 Stoyan Stefanow 的《JavaScript 面向对象编程指南》,这本书里面有很多小的代码片段以及相关的图文解读,可以帮助你更好地理解 JavaScript 的相关特性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
Jan 15 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
Javascript中的getUTCHours()方法使用详解
Jun 10 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
高效的jQuery代码编写技巧总结
Feb 22 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
详解Vue Elememt-UI构建管理后台
Feb 27 Javascript
NProgress显示顶部进度条效果及使用详解
Sep 21 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 Javascript
js实现截图保存图片功能的代码示例
Feb 16 #Javascript
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 #Javascript
原生JS实现图片翻书效果
Feb 16 #Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 #Javascript
js+html制作简单验证码
Feb 16 #Javascript
Vue 仿百度搜索功能实现代码
Feb 16 #Javascript
javascript实现秒表计时器的制作方法
Feb 16 #Javascript
You might like
php修改NetBeans默认字体的大小
2013/07/02 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
python解析yaml文件过程详解
2019/08/30 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
财务主管的岗位职责
2013/12/30 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
更夫岗位责任制
2014/02/11 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
合同范本之电脑出租
2019/08/13 职场文书