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 相关文章推荐
匹配任意字符的正则表达式写法
Apr 29 Javascript
jQuery创建插件的代码分析
Apr 14 Javascript
字符串的replace方法应用浅析
Dec 06 Javascript
jquery $.ajax相关用法分享
Mar 16 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
拖动时防止选中
Feb 03 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
微信小程序单选框自定义赋值
May 26 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
Aug 12 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python合并多个excel文件的示例
2020/09/23 Python
阿里旅行:飞猪
2017/01/05 全球购物
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
2014社区三八妇女节活动方案
2014/03/30 职场文书
岗位职责说明书
2014/05/07 职场文书
应届生自荐书
2014/06/23 职场文书
升职自荐书
2019/05/09 职场文书
公开致歉信
2019/06/24 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
用Python将GIF动图分解成多张静态图片
2021/06/11 Python