解析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 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
Jquery replace 字符替换实现代码
Dec 02 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
JS实现按钮添加背景音乐示例代码
Oct 17 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
jQuery中getJSON跨域原理的深入讲解
Sep 02 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一些有意思的小区别
2006/12/06 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
Django分页功能的实现代码详解
2019/07/29 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
银行竞聘演讲稿
2014/05/16 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
迎国庆横幅标语
2014/10/08 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript