国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

解析JavaScript中的不可見數據類型

2019-11-20 21:32:35
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新泰市| 巴林左旗| 虎林市| 得荣县| 陈巴尔虎旗| 新绛县| 宁夏| 垣曲县| 葫芦岛市| 建昌县| 平度市| 绥滨县| 聂荣县| 宁德市| 通道| 平昌县| 靖远县| 杂多县| 屯昌县| 三原县| 合川市| 厦门市| 宿州市| 彩票| 隆昌县| 行唐县| 保康县| 奎屯市| 枣庄市| 凤阳县| 枣阳市| 鄱阳县| 阳西县| 井研县| 阳谷县| 墨江| 香港 | 阳东县| 华阴市| 全椒县| 北川|