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 解析Json字符串的性能比较分析代码
Dec 16 Javascript
js 页面刷新location.reload和location.replace的区别小结
Dec 24 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
js返回前一页刷新本页重载页面
Jul 29 Javascript
JS+CSS实现滑动切换tab菜单效果
Aug 25 Javascript
React复制到剪贴板的示例代码
Aug 22 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
浅析Visual Studio Code断点调试Vue
Feb 27 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 Javascript
ant design 日期格式化的实现
Oct 27 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
python实现基本进制转换的方法
2015/07/11 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python单元测试实例详解
2018/05/25 Python
Django Celery异步任务队列的实现
2019/07/24 Python
如何基于Python批量下载音乐
2019/11/11 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
毕业自荐书
2013/12/09 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
写自荐信三大法宝
2014/01/24 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js
Redis过期数据是否会被立马删除
2022/07/23 Redis