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 相关文章推荐
利用js对象弹出一个层
Mar 26 Javascript
理解Javascript_13_执行模型详解
Oct 20 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
微信小程序表单验证错误提示效果
May 19 Javascript
微信小程序url与token设置详解
Sep 26 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 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通过ajax实现双击table修改内容
2014/04/28 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
jquery 问答知识整理
2010/02/11 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python with statement 进行文件操作指南
2014/08/22 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
怎样比较两个类型为String的字符串
2016/08/17 面试题
优秀中学生事迹材料
2014/01/31 职场文书
保护野生动物倡议书
2014/05/16 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
教师先进个人材料
2014/12/17 职场文书
材料员岗位职责范本
2015/04/11 职场文书
教师见习总结范文
2015/06/23 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
PyMongo 查询数据的实现
2021/06/28 Python