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 相关文章推荐
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
jquery表单对象属性过滤选择器实例分析
May 18 Javascript
node.js缺少mysql模块运行报错的解决方法
Nov 13 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
Javascript中常用类型的格式化方法小结
Dec 26 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
js+canvas实现滑动拼图验证码功能
Mar 26 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
Apr 01 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
Apr 07 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
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下对数组进行排序的函数
2010/08/08 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
简单JS代码压缩器
2006/10/12 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python把转列表为集合的方法
2019/06/28 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
详解Python中的Lock和Rlock
2021/01/26 Python
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
大学生军训自我评价分享
2013/11/09 职场文书
财务简历的自我评价
2014/03/05 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技