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 相关文章推荐
让getElementsByName适应IE和firefox的方法
Sep 24 Javascript
html中的input标签的checked属性jquery判断代码
Sep 19 Javascript
JavaScript 学习笔记之语句
Jan 14 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 Javascript
微信小程序 引用其他js文件实现代码
Feb 22 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
node简单实现一个更改头像功能的示例
Dec 29 Javascript
vue实现井字棋游戏
Sep 29 Javascript
js实现复制粘贴的两种方法
Dec 04 Javascript
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
如何将JavaScript将数组转为树形结构
Jun 02 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/04/05 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
初中考试作弊检讨书
2014/02/01 职场文书
怎么写自荐书范文
2014/02/12 职场文书
年终工作总结范文2014
2014/11/27 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers