理解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 相关文章推荐
载入进度条 效果
Jul 08 Javascript
初学Javascript的一些总结
Nov 03 Javascript
JQuery this 和 $(this) 的区别
Aug 23 Javascript
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
fastadmin中调用js的方法
May 14 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
YII框架关联查询操作示例
2019/04/29 PHP
utf8的编码算法 转载
2006/12/27 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python快速从注释生成文档的方法
2016/12/26 Python
python:print格式化输出到文件的实例
2018/05/14 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Python列表的切片实例讲解
2019/08/20 Python
Python连接Impala实现步骤解析
2020/08/04 Python
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
Java面试题汇总
2015/12/06 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
劳动竞赛口号
2014/06/16 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
《给予树》教学反思
2016/03/03 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
教你部署vue项目到docker
2022/04/05 Vue.js
python 镜像环境搭建总结
2022/09/23 Python