理解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 相关文章推荐
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
Nov 24 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
jquery ajax方式直接提交整个表单核心代码
Aug 15 Javascript
javascript获取URL参数与参数值的示例代码
Dec 20 Javascript
JavaScript Promise启示录
Aug 12 Javascript
Jquery api 速查表分享
Jan 12 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
Jquery ajax基础教程
Nov 20 Javascript
jQuery+json实现的简易Ajax调用实例
Dec 14 Javascript
React中使用UEditor百度富文本的方法
Aug 22 Javascript
js实现碰撞检测
Jan 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
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
js中getter和setter用法实例分析
2018/08/14 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
django-filter和普通查询的例子
2019/08/12 Python
python绘制随机网络图形示例
2019/11/21 Python
使用python实现飞机大战游戏
2020/03/23 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
机关搬迁方案
2014/05/18 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
三严三实心得体会范文
2014/10/13 职场文书
会计专业自荐信范文
2015/03/05 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
Python3接口性能测试实例代码
2021/06/20 Python