这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要是对 JavaScript 中的不可见数据类型进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
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
来源: http://www.phperz.com/article/17/0415/278068.html