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 相关文章推荐
加速IE的Javascript document输出的方法
Dec 02 Javascript
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
jquery封装的对话框简单实现
Jul 21 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
ng2学习笔记之bootstrap中的component使用教程
Mar 09 Javascript
利用Javascript裁剪图片并存储的简单实现
Mar 13 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
java解析json方法总结
2019/05/16 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
初识javascript 文档碎片
2010/07/13 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
用Python编写简单的定时器的方法
2015/05/02 Python
Python编写Windows Service服务程序
2018/01/04 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
Python创建数字列表的示例
2019/11/28 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
保证书格式
2015/01/16 职场文书
捐款仪式主持词
2015/07/04 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS