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 相关文章推荐
对于Form表单reset方法的新认识
Mar 05 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
Mar 18 Javascript
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
Aug 21 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
详解Node.js串行化流程控制
May 04 Javascript
Vue组件系列开发之模态框
Apr 18 Javascript
微信小程序实现点击图片放大预览
Oct 21 Javascript
深入浅析React中diff算法
May 19 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获取指定范围内最接近数的方法
2015/06/02 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python 全文检索引擎详解
2017/04/25 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
wxPython的安装与使用教程
2018/08/31 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
幼儿园保育员辞职信
2014/01/12 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
西岭雪山导游词
2015/02/06 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
golang特有程序结构入门教程
2021/06/02 Python
Python实现byte转integer
2021/06/03 Python
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js