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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
JavaScript 学习笔记一些小技巧
Mar 28 Javascript
浅谈javascript的数据类型检测
Jul 10 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
js网页右下角提示框实例
Oct 14 Javascript
全面解析Bootstrap表单使用方法(表单控件)
Nov 24 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
Vue2.0 $set()的正确使用详解
Jul 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警告错误信息的解决方法
2013/06/03 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
js实现交通灯效果
2017/01/13 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
python实现清屏的方法
2015/04/30 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python进行两个表格对比的方法
2018/06/27 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
毕业生自荐书
2014/02/03 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
科学发展观演讲稿
2014/09/11 职场文书
四年级小学生评语
2014/12/26 职场文书
刑事上诉状范文
2015/05/22 职场文书
小学课改工作总结
2015/08/13 职场文书
Python中的pprint模块
2021/11/27 Python