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 相关文章推荐
JSON为什么那样红为什么要用json(另有洞天)
Dec 26 Javascript
Javascript实现滚动图片新闻的实例代码
Nov 27 Javascript
js子页面获取父页面数据示例
May 15 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
js+canvas绘制矩形的方法
Jan 28 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
Vue组件tree实现树形菜单
Apr 13 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
jquery写出PC端轮播图实例
Jan 26 jQuery
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 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数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
Node.js实现文件上传
2016/07/05 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
python 连接sqlite及简单操作
2017/06/30 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Python双链表原理与实现方法详解
2020/02/22 Python
python实现横向拼接图片
2020/03/23 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
浅析Python面向对象编程
2020/07/10 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
大学教师年终总结的自我评价
2013/10/29 职场文书
英语道歉信范文
2014/01/09 职场文书
参观接待方案
2014/03/17 职场文书
作文评语大全
2014/04/23 职场文书
鸡毛信观后感
2015/06/11 职场文书
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android