理解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 相关文章推荐
JavaScript Event学习第四章 传统的事件注册模型
Feb 07 Javascript
jQuery-ui中自动完成实现方法
Jun 10 Javascript
zShowBox 图片放大展示jquery版 兼容性
Sep 24 Javascript
js控制的遮罩层实例介绍
May 29 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
js闭包实例汇总
Nov 09 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
Aug 01 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
JavaScript实现显示和隐藏图片
Apr 29 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上传文件,创建递归目录的实例代码
2013/10/18 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
校庆活动策划方案
2014/06/05 职场文书
股东授权委托书
2014/10/15 职场文书
个人创业事迹材料
2014/12/30 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
书法社团活动总结
2015/05/07 职场文书
2015年除四害工作总结
2015/07/23 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python