理解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 isArray 数组类型检测函数
Oct 08 Javascript
对xmlHttp对象方法和属性的理解
Jan 17 Javascript
javascript学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
js中top的作用深入剖析
Mar 04 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
vue 数据双向绑定的实现方法
Mar 04 Vue.js
情人节专属 纯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中include()与require()的区别说明
2010/03/10 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
php微信开发之图片回复功能
2018/06/14 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
新手该如何学python怎么学好python?
2008/10/07 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
flask中过滤器的使用详解
2018/08/01 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
Python实现结构体代码实例
2020/02/10 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
学校元旦晚会方案
2014/02/19 职场文书
办公室主任职责范本
2014/03/07 职场文书
高中生职业规划范文
2014/03/09 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
大学生学习计划书
2014/09/15 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA