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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
Mar 26 Javascript
jquery中val()方法是从最后一个选项往前读取的
Sep 06 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
Angular 组件之间的交互的示例代码
Mar 24 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP中的正规表达式(二)
2006/10/09 PHP
php开发环境配置记录
2011/01/14 PHP
PHP排序算法类实例
2015/06/17 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
超简单的微信小程序轮播图
2019/11/22 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
简单谈谈python的反射机制
2016/06/28 Python
python中format()函数的简单使用教程
2018/03/14 Python
python实现录音小程序
2020/10/26 Python
python实现反转部分单向链表
2018/09/27 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
单位工作证明
2014/10/07 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书