理解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 相关文章推荐
prototype 1.5 & scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 Javascript
JS数组方法reduce的用法实例分析
Mar 03 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实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
js简单时间比较的方法
2016/08/02 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
JavaScript中import用法总结
2019/01/20 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
高中毕业生生活的自我评价
2013/12/08 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
工程建设实施方案
2014/03/14 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
详细总结Python常见的安全问题
2021/05/21 Python
详解nginx进程锁的实现
2021/06/14 Servers
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python