解析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 进度条 实现代码
Jul 30 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
如何对react hooks进行单元测试的方法
Aug 14 Javascript
基于JS实现简单滑块拼图游戏
Oct 12 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 Javascript
AJAX学习笔记
May 18 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实现将GB编码转换为UTF8
2006/11/25 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
如何用python 操作zookeeper
2020/12/28 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
Java的基础面试题附答案
2016/01/10 面试题
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
给校长的建议书400字
2014/05/15 职场文书
社团活动总结报告
2014/06/27 职场文书
法院执行局工作总结
2015/08/11 职场文书
二年级数学教学反思
2016/02/16 职场文书
Python源码解析之List
2021/05/21 Python