解析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 相关文章推荐
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
用JavaScript实现对话框的教程
Jun 04 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
Aug 21 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
深究AngularJS中$sce的使用
Jun 12 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
js利用iframe实现选项卡效果
Aug 09 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
动手学习无线电
2021/03/10 无线电
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
Python实现提取文章摘要的方法
2015/04/21 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
应届生煤化工求职信
2013/10/21 职场文书
函授自我鉴定
2013/11/06 职场文书
小学生新学期寄语
2014/01/19 职场文书
精彩广告词大全
2014/03/19 职场文书
毕业生求职信范文
2014/06/29 职场文书
经营目标管理责任书
2014/07/25 职场文书
安全生产学习心得体会
2016/01/18 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
一文简单了解MySQL前缀索引
2022/04/03 MySQL