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 相关文章推荐
Javascript 代码也可以变得优美的实现方法
Jun 22 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
Aug 11 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
用JS实现图片轮播效果代码(一)
Jun 26 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
基于vue实现一个禅道主页拖拽效果
May 27 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
php注入实例
2006/10/09 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
Python中的变量和作用域详解
2016/07/13 Python
Python处理中文标点符号大集合
2018/05/14 Python
python操作mysql代码总结
2018/06/01 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
python pytest进阶之fixture详解
2019/06/27 Python
python tkinter canvas使用实例
2019/11/04 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
材料专业大学毕业生自荐书
2014/07/02 职场文书
安全演讲稿开场白
2014/08/25 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
四年级语文教学反思
2016/03/03 职场文书