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 相关文章推荐
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
使用JavaScript和C#中获得referer
Nov 14 Javascript
Javascript学习指南
Dec 01 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
Sep 04 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
详解VUE中v-bind的基本用法
Jul 13 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
koa2+vue实现登陆及登录状态判断
Aug 15 Javascript
layui数据表格重载实现往后台传参
Nov 15 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 addslashes 函数详细分析说明
2009/06/23 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
详解node.js 事件循环
2020/07/22 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python中subprocess模块用法实例详解
2015/05/20 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Python通过format函数格式化显示值
2020/10/17 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
白酒业务员岗位职责
2013/12/27 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书