理解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 相关文章推荐
js FLASH幻灯片字符串中有连接符&的处理方法
Mar 01 Javascript
jquery与js函数冲突的两种解决方法
Sep 09 Javascript
javascript获取元素偏移量的方法有哪些
Jun 24 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
Sep 23 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
Node.js模块封装及使用方法
Mar 06 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
JavaScript实现PC端横向轮播图
Feb 07 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 Javascript
代码解析React中setState同步和异步问题
Jun 03 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 常见郁闷问题答解
2006/11/25 PHP
php修改时间格式的代码
2011/05/29 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
简述python Scrapy框架
2020/08/17 Python
python 实现逻辑回归
2020/12/30 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
纽约手袋品牌:KARA
2018/03/18 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
踏青活动策划方案
2014/08/19 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
大学生创业事迹材料
2014/12/30 职场文书
2019入党申请书格式
2019/06/25 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server