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 相关文章推荐
ScrollDown的基本操作示例
Jun 09 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
Nov 09 Javascript
JavaScript中的工厂函数(推荐)
Mar 08 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
JS中使用new Option()实现时间联动效果
Dec 10 Javascript
vue 获取视频时长的实例代码
Aug 20 Javascript
简单了解JavaScript作用域
Jul 31 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 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中$this->含义分析
2009/11/29 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
js实现微信聊天界面
2020/08/09 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
python文件操作整理汇总
2014/10/21 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
python3 re返回形式总结
2020/11/20 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
机关作风建设工作总结
2014/10/23 职场文书
团员个人年度总结
2015/02/26 职场文书
花田少年史观后感
2015/06/16 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers