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 相关文章推荐
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
JQuery each打印JS对象的方法
Nov 13 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
Vue自定义指令拖拽功能示例
Feb 17 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
详解layui弹窗父子窗口之间传参数的方法
Jan 16 Javascript
详解从Vue-router到html5的pushState
Jul 21 Javascript
vue下history模式刷新后404错误解决方法
Aug 18 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
vue-model实现简易计算器
Aug 17 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
一个程序下载的管理程序(四)
2006/10/09 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
python发送HTTP请求的方法小结
2015/07/08 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Python实现全排列的打印
2018/08/18 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
大三学习计划书范文
2014/05/02 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
学籍证明模板
2015/06/18 职场文书
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android
Python软件包安装的三种常见方法
2022/07/07 Python