理解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 相关文章推荐
IE8 兼容性问题(属性名区分大小写)
Jun 04 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
ionic3 懒加载
Aug 16 Javascript
深入理解ES7的async/await的用法
Sep 09 Javascript
js比较两个单独的数组或对象是否相等的实例代码
Apr 28 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 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 数组入门教程小结
2009/05/20 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
js编写选项卡效果
2017/05/23 Javascript
vue filters的使用详解
2018/06/11 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
python简单获取数组元素个数的方法
2015/07/13 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python 错误处理 assert详解
2020/04/20 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
经典英文广告词
2014/03/18 职场文书
计算机网络专业求职信
2014/06/05 职场文书
党员个人整改措施
2014/10/24 职场文书
2014年维修工作总结
2014/11/22 职场文书
师德师风个人总结
2015/02/06 职场文书
支行行长岗位职责
2015/02/15 职场文书
员工考勤管理制度
2015/08/06 职场文书
员工工作心得体会
2019/05/07 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python