手机版

解析JavaScript中的不可见数据类型

时间:2021-11-12 来源:互联网 编辑:宝哥软件园 浏览:

JS提供了一些内置的对象、函数和构造函数供我们编程,比如Math、parseInt、Object、Array等等。这些都是可见的,可以在编程时使用。例如,我可以创建新对象或新数组。有些是看不见的,这些物体只有在特殊情况下才能由发动机提供。这些类型的对象经常被剥夺一些功能。这里有一些例子。1.参数类型参数类型不能由程序员手动创建,也就是说,不能新建参数()。它只有一个对象参数,复制代码如下: func func(){ console . log(arguments[0])//1 console . log(arguments . length)//3 } func(1,2,3) arguments对象是在调用函数时创建的,只在函数内部可见和使用。您可以看到,参数与Array非常相似,Array可以通过索引获取元素,并且还具有长度属性。但它不是Array,还有一些没有Array的方法,比如push、pop等等。参数在ES5 10.6中定义。第二,bind返回的函数非常特殊。bind是由ES5赋予Function.prototype的一种新方法,直接在函数上调用,如call/apply。它返回一个指定上下文和参数的函数。复制代码如下:函数func(age){ console . log(' name 3360 ' this . name ',career : ' age)} var person={ name : '约翰麦卡锡' } var f1=func.bind(person,' computer scientist ')f1()//name :约翰麦卡锡,Career: computer scientist可以看到,返回的函数f1和普通函数一样都是用括号调用的。一切正常,但下面的代码会让你大吃一惊。复制代码如下: func func(age){ console . log(' name 3360 ' this . name ',career : ' age)} var person={ name : '约翰麦卡锡' } var f1=func.bind(person,Computer Scientist ')console . log(f1 . prototype)//undefined与上面的代码相比,最后一句不同。不是执行f1(),而是打印f1.prototype,发现它未定义。奇怪吗?每个函数都有一个原型属性,用来实现原型继承。确实,bind返回的函数比较特殊,没有原型。这个特殊的函数是由JS引擎创建的,客户端程序员无法通过函数声明或函数度量直接得到。规范中明确指出了这一点:ES5 15.3.4.5(9500 . 163.com)。

版权声明:解析JavaScript中的不可见数据类型是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。