解析JavaScript中的不可見數(shù)據(jù)類型
JS提供了一些內(nèi)置對象、函數(shù)和構(gòu)造器供我們編程,如Math、parseInt、Object、Array等。這些都是可見的,編程時可以使用的。比如我可以new Object 或 new Array。
有一些則是不可見的,這些對象只能由引擎在特殊的情形提供。這些類型的對象往往還被消減了一些功能。下面列舉一些
一、Arguments 類型
Arguments 類型 不能由程序員手動創(chuàng)建其對象,即你不能 new Arguments() 。 它有且僅有一個對象arguments
function func() {
console.log(arguments[0]) // 1
console.log(arguments.length) // 3
}
func(1, 2, 3)
arguments對象是在函數(shù)調(diào)用的時候創(chuàng)建的,只在函數(shù)內(nèi)部可見和使用??梢钥吹絘rguments很象Array,可以按索引取元素,也有l(wèi)ength屬性。但它不是Array,它沒有Array的有一些方法比如push、pop等。Arguments 在ES5 10.6 里定義。
二、bind返回的函數(shù)很特殊
bind是ES5給Function.prototype新增的一個方法,它和call/apply一樣在function上直接調(diào)用。它返回一個指定了上下文和參數(shù)的函數(shù)。
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
可以看到返回的函數(shù)f1和普通函數(shù)一樣使用小括號執(zhí)行調(diào)用了。 一切正常,但下面的代碼會讓你大跌眼鏡
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
和上面代碼比較,就最后一句不同,沒有執(zhí)行f1(),而是打印出f1.prototype,發(fā)現(xiàn)是undefined。
奇怪嗎? 每個function不都有一個prototype屬性嗎,這是用來實現(xiàn)原型繼承的哦。的確,bind返回的function比較特殊,它沒有prototype。這種特殊的函數(shù)是由JS引擎創(chuàng)建的,客戶端程序員沒法通過函數(shù)聲明或函數(shù)直接量得到。
這一點在規(guī)范里有明確提示 ES5 15.3.4.5
相關(guān)文章
使用jsonp實現(xiàn)跨域獲取數(shù)據(jù)實例講解
這篇文章主要介紹了使用jsonp實現(xiàn)跨域獲取數(shù)據(jù)實例講解,需要的朋友可以參考下2016-12-12JavaScript面試出現(xiàn)頻繁的一些易錯點整理
通過幾個常見面試開始,討論針對一個題目的分析思路,就有了下面這篇文章,本文主要給大家整理總結(jié)介紹了關(guān)于JavaScript面試中會頻繁出現(xiàn)的一些易錯點,對大家具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起看看吧。2018-03-03關(guān)于JavaScript對象的動態(tài)選擇及遍歷對象
本文為大家介紹下JavaScript對象的兩點:動態(tài)選擇方法及屬性、遍歷對象屬性和方法,需要的朋友可以參考下2014-03-03JavaScript實現(xiàn)動態(tài)數(shù)據(jù)可視化的示例詳解
動態(tài)數(shù)據(jù)可視化能夠?qū)⒋罅繑?shù)據(jù)以直觀、生動的方式呈現(xiàn),幫助用戶更好地理解和分析數(shù)據(jù),本文主要為大家介紹了如何使用JavaScript實現(xiàn)這一功能,需要的可以參考下2024-02-02JavaScript中undefined和is?not?defined的區(qū)別與異常處理
這篇文章主要給大家介紹了關(guān)于JavaScript中undefined和is?not?defined的區(qū)別與異常處理的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2022-03-03