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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
Jan 12 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
深入理解Angularjs中$http.post与$.post
May 19 Javascript
angular框架实现全选与单选chekbox的自定义
Jul 06 Javascript
Vue动态组件实例解析
Aug 20 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
详解React之key的使用和实践
Sep 29 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 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操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php生成图片验证码
2015/06/09 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python 实现两个npy档案合并
2020/07/01 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python集合的新增元素方法整理
2020/12/07 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
Delphi工程师笔试题
2013/09/21 面试题
回门宴新郎答谢词
2014/01/12 职场文书
求职毕业生自荐书
2014/02/08 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript