JavaScript 原型继承


Posted in Javascript onDecember 26, 2011

Object.prototype
JavaScript是基于原型继承的,任何对象都有一个prototype属性。Object.prototype是所有对象的根,并且不可改变。

Object.prototype=null; 
alert(Object.prototype);//[object Object]

Object与Object.prototype
Object继承于Object.prototype,增加一个属性给Object.prototype上,同时也会反应到Object上。如:
Object.prototype.nameStr="Object Prototype"; 
Object.prototype.getName=function(){return this.nameStr}; 
alert(Object.getName());//Object Prototype

Function.prototype与Object.prototype
由于Object.prototype是万物之根,所以Function.prototype也同时会继承Object.prototype的所有属性。如:
Object.prototype.nameStr="Object Prototype"; 
Object.prototype.getName=function(){return this.nameStr}; 
alert(Function.prototype.getName());//Object Prototype

Object/Function/String/Number/Boolean/Array与Date
Object/Function/String/Number/Boolean/Array与Date都是函数,函数又继承于Function.prototype, 所以更改Function.prototype一样会影响到Object/Function/String/Number/Boolean/Array与Date。如:

Function.prototype.initType='Function Type'; 
Function.prototype.getType=function(){return this.initType}; 
//alert(Object.getType());//Function Type 
//alert(Date.getType());//Function Type 
//alert(Number.getType());//Function Type 
//alert(String.getType());//Function Type 
//alert(Boolean.getType());//Function Type 
alert(Array.getType());//Function Type

同样Function.prototype也会把所受Object.prototype的影响,传递给它的下一层级。如:
Object.prototype.nameStr="Object Prototype"; 
Object.prototype.getName=function(){return this.nameStr}; 
alert(Function.prototype.getName());//Object Prototype 
alert(Array.getName());//Object Prototype

alert(Boolean.prototype.getName());//Object Prototype Array/Array.prototype与Function.prototype/Object.prototype

Array是函数对象,受Function.prototype的影响,而Array.prototype不是函数对象,所不受Function.prototype的影响,但所有对象受Object.prototype的影响,所以Array.prototype也会受Object.prototype的影响。如:
Object.prototype.nameStr="Object Prototype"; 
Object.prototype.getName=function(){return this.nameStr}; 
//alert(Function.prototype.getName());//Object Prototype 
//alert(Boolean.prototype.getName());//Object Prototype 
Function.prototype.initFun=function(){ 
return 'Function.prototype.initFun'; 
} 
alert(Array.initFun());//Function.prototype.initFun 
var arr=['a','b']; 
alert(arr.getName());//Object Prototype 
alert(arr.initFun());//Error: arr.initFun is not a function 
alert(arr.initFun);//undefined
Javascript 相关文章推荐
js动态加载以及确定加载完成的代码
Jul 31 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
基于javascript实现样式清新图片轮播特效
Mar 30 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
Node.js使用cookie保持登录的方法
May 11 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
React中Ref 的使用方法详解
Apr 28 Javascript
纯JS实现五子棋游戏
May 28 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 #Javascript
查看源码的工具 学习jQuery源码不错的工具
Dec 26 #Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 #Javascript
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 #Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 #Javascript
关于跨站脚本攻击问题
Dec 22 #Javascript
js DOM的学习笔记
Dec 22 #Javascript
You might like
怎样在UNIX系统下安装php3
2006/10/09 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
将php数组输出html表格的方法
2014/02/24 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
JS常用算法实现代码
2016/11/14 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
基于Python的接口测试框架实例
2016/11/04 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python爬取网易云音乐评论
2018/11/16 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
介绍下Lucene建立索引的过程
2016/03/02 面试题
中学教师岗位职责
2013/11/26 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
2015年女生节活动总结
2015/02/27 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
决心书格式及范文
2019/06/24 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL