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技巧之不要用for in语句对数组进行遍历
Oct 20 Javascript
jQuery 中DOM 操作详解
Jan 13 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
javascript禁止超链接跳转的方法
Feb 02 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 Javascript
canvas实现图像放大镜
Feb 06 Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
Jun 17 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
图书室管理制度
2014/01/19 职场文书
先进集体获奖感言
2014/02/13 职场文书
旅游安全协议书
2014/04/21 职场文书
国际贸易专业求职信
2014/06/04 职场文书
2014年预算员工作总结
2014/12/05 职场文书
行政文员岗位职责
2015/02/04 职场文书
正规借条模板
2015/05/26 职场文书
欠条范文
2015/07/03 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers