解析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 load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
使用angular写一个hello world
Jan 23 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
jQuery实现两列等高并自适应高度
Dec 22 Javascript
js实现日历与定时器
Feb 22 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
jquery实现有过渡效果的tab切换
Jul 17 jQuery
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
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
python 实现堆排序算法代码
2012/06/05 Python
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
详解django中自定义标签和过滤器
2017/07/03 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
营销与策划专业毕业生求职信
2013/11/01 职场文书
优秀学生事迹材料
2014/02/08 职场文书
亲属关系公证书
2014/04/08 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
先进党支部申报材料
2014/12/24 职场文书
丽江古城导游词
2015/02/03 职场文书
佛光寺导游词
2015/02/10 职场文书