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 相关文章推荐
JS Timing
Apr 21 Javascript
JavaScript 未结束的字符串常量常见解决方法
Jan 24 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
jQuery 下拉列表 二级联动插件分享
Mar 29 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
javascript学习笔记--数字格式类型
May 22 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
老生常谈js数据类型
Aug 03 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
May 15 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 Javascript
vue 实现图片懒加载功能
Dec 31 Vue.js
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使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP中soap的用法实例
2014/10/24 PHP
php使用session二维数组实例
2014/11/06 PHP
php中socket通信机制实例详解
2015/01/03 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
读jQuery之十 事件模块概述
2011/06/27 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
Python Socket传输文件示例
2017/01/16 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
晚会邀请函范文
2014/01/24 职场文书
学校就业推荐信范文
2014/05/19 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
异地年检委托书范本
2014/09/24 职场文书
2014年库房工作总结
2014/11/26 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android