解析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 相关文章推荐
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
详解vuex的简单使用
Mar 12 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 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
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
php跨服务器访问方法小结
2015/05/12 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
销售找工作求职信
2013/12/20 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
太太口服液广告词
2014/03/20 职场文书
安全先进班组材料
2014/12/26 职场文书
迎新生欢迎词
2015/01/23 职场文书
三方合作意向书范本
2015/05/09 职场文书