理解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 拖放效果实现代码
Jan 22 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
Aug 29 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
深入理解Angular.JS中的Scope继承
Jun 04 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 Javascript
axios如何取消重复无用的请求详解
Dec 15 Javascript
详解jQuery中的prop()使用方法
Jan 05 jQuery
情人节专属 纯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中计算程序运行时间的类代码
2012/11/03 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php操作mongoDB实例分析
2014/12/29 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
简约JS日历控件 实例代码
2013/07/12 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
python僵尸进程产生的原因
2017/07/21 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python的pygame安装教程详解
2020/02/10 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
基于python实现对文件进行切分行
2020/04/26 Python
为什么说python更适合树莓派编程
2020/07/20 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
期末自我鉴定
2014/01/23 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
土地租赁意向书
2014/07/30 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL