Javascript中prototype的使用详解


Posted in Javascript onJune 18, 2016

先看下面一段代码:

function Machine(ecode, horsepower) {
  this.ecode = ecode;
  this.horsepower = horsepower;
}

function showme() {
  alert(this.name + " " + this.ecode + " " + this.horsepower);
}

var machine = new Machine("code1", 15);
machine.name = "machine1";
machine.showme = showme;
machine.showme();

这样一段代码,虽然建立了一个Machine对象后,通过machine.showme = showme;使得showme函数变成了Machine对象machine的方法。

但是,就看上面两个函数(一个是对象的构造函数,一个是普通方法)没有任何关系,这样的代码,不是那么“优雅“,因此,便有了prototype。

//机器
function Machine(ecode, horsepower) {
  this.ecode = ecode;
  this.horsepower = horsepower;
}
//特别注意这一句,Machine.prototype是第一次初始化的时候就初始化好的,
//当调用Machine作为构造函数的时候,engine的值不会再改变
Machine.prototype.engine = this.ecode + " " + this.horsepower;
Machine.prototype.showme = function () { alert(this.name + " " + this.ecode + " " + this.horsepower); }

利用以上代码,所有的Machine对象就有了showme方法了。

但是要特别注意:

prototype只是面对实例的,而不是面对类对象的。(js中,类本身就是一个对象)所以Machine.showme();会报错误,因为Machine这个对象是没有showme方法的。

那么,我们怎么使用showme方法呢?必须得新建一个Machine实例,只有Machine实例才会有这个方法。

var machine = new Machine("code1", 15);
machine.name = "machine1";
machine.showme(); //输出machine1 code1 15。

有了prototype之后,我们更加容易实现继承关系。比如我现在写一个Car类,需要继承目前这个Machine类,只需要写如下代码即可:

//小汽车
function Car(name, ecode, horsepower) {
  this.name = name;
  //调用父类的构造函数,使得Car的对象有ecode、horsepower属性
  Machine.call(this, ecode, horsepower);
}
//Car的原型指向Machine,使Car对象有Machine原型的任意属性和方法,比如showme
Car.prototype = new Machine();

这里如何调用父构造函数,以及如何获得父类的原型,注释的都很清楚,就不在赘述了。

然后,我们可以新建一个对象测试一下:

//新建一个类Car的对象。
var xiali = new Car("xiali", "aaa", 15);
alert(xiali.engine);
xiali.showme();

以上,是prototype的基本应用,但是也是prototype的最主要的应用。

掌握的prototype的使用,在以后的过程中,对于对象的构建和继承,会有更深层次的理解。

查看更多JavaScript的语法,大家可以关注:《JavaScript 参考教程》、《JavaScript代码风格指南》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
jquery密码强度校验
Dec 02 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
jQuery回调方法使用示例
Jun 26 jQuery
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
如何在JavaScript中等分数组的实现
Dec 13 Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 #Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 #Javascript
JavaScript的this关键字的理解
Jun 18 #Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 #Javascript
jQuery UI Bootstrap是什么?
Jun 17 #Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 #Javascript
JavaScript获取当前url根目录(路径)
Jun 17 #Javascript
You might like
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
python实现倒计时的示例
2014/02/14 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
python实现名片管理系统
2018/11/29 Python
python实现日志按天分割
2019/07/22 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
应届生会计求职信
2013/11/11 职场文书
理工科学生的自我评价
2013/12/15 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
科技工作者先进事迹
2014/08/16 职场文书
环卫处个人工作总结
2015/03/04 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python