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 相关文章推荐
一样的table?不一样的table(可编辑状态table)
Sep 19 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
javascript中返回顶部按钮的实现
May 05 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
解决webpack dev-server不能匹配post请求的问题
Aug 24 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 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的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php常用正则函数实例小结
2016/12/29 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
Node.js实现数据推送
2016/04/14 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
Python实例一个类背后发生了什么
2016/02/09 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
一月红领巾广播稿
2014/02/11 职场文书
学校教师安全责任书
2014/07/23 职场文书
2015暑假假期总结
2015/07/13 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
table不让td文字溢出操作方法
2022/12/24 HTML / CSS