Javascript原型链和原型的一个误区


Posted in Javascript onOctober 22, 2014

之前我对Javascript的原型链中, 原型继承与标识符查找有些迷惑,

如, 如下的代码:

function Foo() {};

var foo = new Foo();

Foo.prototype.label = "laruence";

alert(foo.label); //output: laruence

alert(Foo.label);//output: undefined

今天看到了如下这个图:

Javascript原型链和原型的一个误区

Javascript object layout
另外, 在Javascript Object Hierarchy看到:

The prototype is only used for properties inherited by objects/instances created by that function. The function itself does not use the associated prototype.

也就是说, 函数对象的prototype并不作用于原型链查找过程中,

今天在firefox下发现(因为firefox通过__proto__暴露了[[prototype]]), 真正参与标识符查找的是函数对象的__proto__,

function Foo() {};

var foo = new Foo();

Foo.__proto__.label = "laruence";

alert(Foo.label); //output: laruence

alert(foo.label);//output: undefined

而, 显然的:

function Foo() {};

alert(Foo.__proto__ === Foo.prototype); //output: false

另外, 也解释了,

alert(Object.forEach); // undefined

 

Function.prototype.forEach = function(object, block, context) {

    for (var key in object) {

        if (typeof this.prototype[key] == "undefined") {

            block.call(context, object[key], key, object);

        }

    }

 

};

 

alert(Object.forEach);

alert(Function.forEach);

alert(Object.forEach === Function.forEach); // true
Javascript 相关文章推荐
jQuery的选择器中的通配符使用介绍
Mar 20 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
js实现数组去重方法及效率?Ρ? target=
Feb 14 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
webpack自动打包和热更新的实现方法
Jun 24 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
Mar 04 Javascript
Javascript this 关键字 详解
Oct 22 #Javascript
Javascript 构造函数详解
Oct 22 #Javascript
Javascript中Array.prototype.map()详解
Oct 22 #Javascript
javascript数组详解
Oct 22 #Javascript
Javascript 数组排序详解
Oct 22 #Javascript
Javascript中arguments对象详解
Oct 22 #Javascript
Javascript中的默认参数详解
Oct 22 #Javascript
You might like
一段php加密解密的代码
2006/10/09 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python中pop()函数的语法与实例
2020/12/01 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
介绍一下grep命令的使用
2015/06/12 面试题
主治医师岗位职责
2013/12/10 职场文书
业务员岗位职责范本
2013/12/15 职场文书
入学申请自荐信范文
2014/02/26 职场文书
创意广告词
2014/03/17 职场文书
国企干部对照检查材料
2014/08/22 职场文书
工作检讨书500字
2014/10/19 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL