理解JavaScript的prototype属性


Posted in Javascript onFebruary 11, 2012

其实,关于prototype只要几句话就可以总结:
任何原型都是对象,只有对象有原型
只有Function有prototype属性,它是这个Function作为构造器时生成对象所继承的原型。Function的原型和它的prototype属性无关
对象的原型可以通过非标准的属性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 访问。
1其实是错的,Object这个原型链尽头的对象它没有原型。可是为了更简单表述。在看原型链后你就会明白.toString()这类没有定义过的方法是怎样来的。
上面说的二义性,是文字理解上的,语法本身没有歧义。prototype是原型的意思,可是一个对象的原型不是由prototype去访问。
Function有prototype属性,可是和自己的原型没有关系。理解这点后,再去看关于原型链、继承的文章就容易理解多了。

下面是些例子,可以加深认识:

// 任何对象都有原型 
obj = {}; 
console.log( obj.__proto__ ); 
console.log( Object.getPrototypeOf(obj) ); 
console.log( obj.__proto__ === Object.getPrototypeOf(obj) ); //对象并没有语法意义的prototype属性 
alert(obj.prototype) //undefined 
//prototype作为一个属性,仅存在于Function中,代表以这个Function创建的新实例集成的原型,和Function本身的原型无关 
var F = function(name){ 
this.name = name; 
} 
obj = {a:3, 
get b (){ 
return this.a; 
} 
}; 
F.prototype = obj; 
newObj = new F('new name'); 
newObj.name; //作为构造器,name是newObj的自身属性 
newObj.a; //3 
//它继承了obj。可以通过这样证实: 
Object.getPrototypeOf( newObj ) === obj; // true 
newObj.__proto__ === obj; //true
Javascript 相关文章推荐
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
js计算页面刷新的次数
Jul 20 Javascript
js中有关IE版本检测
Jan 04 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
JavaScript中this的四个绑定规则总结
Sep 26 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
JS实现全屏的四种写法
Dec 30 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
微信小程序系列之自定义顶部导航功能
May 21 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 #Javascript
基于jquery实现状态限定编辑的代码
Feb 11 #Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
Feb 10 #Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 #Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 #Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 #Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 #Javascript
You might like
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
ThinkPHP之getField详解
2014/06/20 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
vue 中自定义指令改变data中的值
2017/06/02 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
初步理解Python进程的信号通讯
2015/04/09 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
毕业生个人求职信范文分享
2014/01/05 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
西柏坡观后感
2015/06/08 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android