解析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中出现乱码的处理心得
Dec 24 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
总结AngularJS开发者最常犯的十个错误
Aug 31 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 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 MYSQL 数据备份类
2009/06/19 PHP
PHP 命名空间实例说明
2011/01/27 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JS常用函数使用指南
2014/11/23 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python关键字and和or用法实例
2015/05/28 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
2014教师年度思想工作总结
2014/11/10 职场文书
捐款感谢信
2015/01/20 职场文书
趣味运动会简讯
2015/07/20 职场文书
财务年终工作总结大全
2019/06/20 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏