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时无响应数据的解决方法
May 25 Javascript
JQuery删除DOM节点的方法
Jun 11 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
May 26 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
Vue插件写、用详解(附demo)
Mar 20 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
Sep 03 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
js html实现计算器功能
Nov 13 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
js实现圆形菜单选择器
Dec 03 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
html中select语句读取mysql表中内容
2006/10/09 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
js日期相关函数总结分享
2013/10/15 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python读取与处理netcdf数据方式
2020/02/14 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
python 实现简易的记事本
2020/11/30 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
应届毕业生求职信
2013/11/30 职场文书
中学门卫岗位职责
2013/12/26 职场文书
市场专员岗位职责
2014/02/14 职场文书
网络信息安全承诺书
2014/03/26 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
母亲节感言
2015/08/03 职场文书
教师节随笔
2015/08/15 职场文书