解析JavaScript中的不可见数据类型


Posted in Javascript onDecember 02, 2013

JS提供了一些内置对象、函数和构造器供我们编程,如Math、parseInt、Object、Array等。这些都是可见的,编程时可以使用的。比如我可以new Object 或 new Array。

有一些则是不可见的,这些对象只能由引擎在特殊的情形提供。这些类型的对象往往还被消减了一些功能。下面列举一些

一、Arguments 类型
Arguments 类型 不能由程序员手动创建其对象,即你不能 new Arguments() 。 它有且仅有一个对象arguments

function func() { 
    console.log(arguments[0])     // 1 
    console.log(arguments.length) // 3 
} 
func(1, 2, 3)

arguments对象是在函数调用的时候创建的,只在函数内部可见和使用。可以看到arguments很象Array,可以按索引取元素,也有length属性。但它不是Array,它没有Array的有一些方法比如push、pop等。Arguments 在ES5 10.6 里定义。

二、bind返回的函数很特殊
bind是ES5给Function.prototype新增的一个方法,它和call/apply一样在function上直接调用。它返回一个指定了上下文和参数的函数。

function func(age) { 
    console.log('name: ' + this.name + ', career: ' + age) 
} 
var person = {name: 'John McCarthy'} 
var f1 = func.bind(person, 'computer scientist') 
f1() // name: John McCarthy, career: computer scientist

可以看到返回的函数f1和普通函数一样使用小括号执行调用了。 一切正常,但下面的代码会让你大跌眼镜
function func(age) { 
    console.log('name: ' + this.name + ', career: ' + age) 
} 
var person = {name: 'John McCarthy'} 
var f1 = func.bind(person, 'computer scientist') 
console.log(f1.prototype) // undefined

和上面代码比较,就最后一句不同,没有执行f1(),而是打印出f1.prototype,发现是undefined。

奇怪吗? 每个function不都有一个prototype属性吗,这是用来实现原型继承的哦。的确,bind返回的function比较特殊,它没有prototype。这种特殊的函数是由JS引擎创建的,客户端程序员没法通过函数声明或函数直接量得到。

这一点在规范里有明确提示 ES5 15.3.4.5

解析JavaScript中的不可见数据类型

Javascript 相关文章推荐
jquery DIV撑大让滚动条滚到最底部代码
Jun 06 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
常用DOM整理
Jun 16 Javascript
详解javascript实现瀑布流绝对式布局
Jan 29 Javascript
一起学写js Calender日历控件
Apr 14 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
JS中的BOM应用
Feb 02 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
Oct 12 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
Dec 02 #Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 #Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 #Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 #Javascript
浅析jquery的作用与优势
Dec 02 #Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 #Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 #Javascript
You might like
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP实现简易blog的制作
2016/10/24 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
javascript 学习笔记(onchange等)
2010/11/14 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
JS作用域深度解析
2016/12/29 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python小技巧之批量抓取美女图片
2014/06/06 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
违反学校规定检讨书
2014/01/18 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
加油口号大全
2014/06/13 职场文书
学校开学标语
2014/10/06 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA