解析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 相关文章推荐
最近项目写了一些js,水平有待提高
Jan 31 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
Mar 03 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
jquery中map函数遍历数组用法实例
May 18 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 Javascript
vue系列之动态路由详解【原创】
Sep 10 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 Javascript
TypeScript类型声明书写详解
Aug 28 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
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数据 dbclass类
2011/05/07 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
简略的前端架构心得&&基于editor为例子的编码小技巧
2010/11/25 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python实现在线翻译
2020/06/18 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
毕业生自我鉴定
2013/11/05 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
行风评议整改报告
2014/11/06 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
深入理解 Golang 的字符串
2022/05/04 Golang