解析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 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
js的Prototype属性解释及常用方法
May 08 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
Oct 15 Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 jQuery
微信小程序工具函数封装
Oct 28 Javascript
查找Vue中下标的操作(some和findindex)
Aug 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
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Python中获取对象信息的方法
2015/04/27 Python
python图片验证码生成代码
2016/07/02 Python
postman和python mock测试过程图解
2020/02/22 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
商务日语毕业生自荐信
2013/11/23 职场文书
大学生表扬信范文
2014/01/09 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
卖房协议书
2014/04/11 职场文书
中考标语大全
2014/06/05 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
运动会表扬稿范文
2015/05/05 职场文书
刑事撤诉申请书
2015/05/18 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers