JavaScript程式設計(三) 引用型別

2021-09-17 18:59:26 字數 2926 閱讀 2219

函式的屬性和方法

基本包裝型別

引用型別的值(物件)是引用型別的乙個例項,ecmascript中,引用型別是一種資料結構,用於將資料和功能組織在一起,他們常被稱為,但是並不太準確,因為它不具備傳統的物件導向語言所支援的類和介面等基本結構。引用型別也被稱為物件定義。它描述的是一類物件所具有的屬性和方法。

物件是某個特定引用型別的例項。

instanceof 檢測陣列的時候,如果存在兩個以上不同版本的array建構函式,會不準確,ecmascript5增加了array.isarray()判斷乙個值是不是陣列。

陣列的push(),pop(),unshift(),shift()方法組合使用,可以實現佇列和棧的效果。

函式是物件,函式名是指標。

沒有過載

// 函式宣告

function

addsome()

function

addsome()

// 等同於下面的**

// 函式表示式

varaddsome

=function

(num)

varaddsome

=function

(num)

第二次建立函式的時候,覆蓋了第乙個函式的變數。

解析器會優先讀取函式宣告,即函式宣告提公升。函式表示式必須等到解析器執行到它所在的**行才會被解釋執行。函式表示式和正常宣告變數類似,變數宣告提公升但是給它賦值部分並沒有執行。

除了這一點之外,兩者等價。注意不要同時使用,safari中會導致錯誤。

函式名為變數,所以函式可以作為值來使用,作為函式引數,函式返回值。

函式內部有兩個特殊的物件,arguments和this

arguments物件

類陣列物件,主要用於儲存函式引數。還有乙個callee屬性,這是乙個指標,指向arguments物件的函式。

function

factorial

(num)

else

}factorial(5

)

this

this引用的是函式據以執行的環境物件。

函式的名字僅僅是乙個包含指標的變數。

caller

ecmascript5 這個屬性中儲存的是呼叫當前函式的函式的引用。全域性呼叫的使用它為null,即儲存這誰呼叫了這個函式。

function

outer()

function

inner()

outer

()

ecmascript5還定義了arguments.caller屬性,嚴格模式下訪問會導致錯誤,非嚴格模式下訪問這個屬性始終是undefined

??? 定義這個屬性是為了分清arguments.caller和函式的caller屬性。以上變化都是為了加強這門語言的安全性,第三方**不能在相同的環境裡面窺視其他**。

無法改變這部分好像跟閉包有關,看到22章再說

var color =

"red"

;var blue =

;var yellow =

;function

saycolor()

var sayblue = saycolor.

bind

(blue)

;saycolor()

;// red

sayblue()

;// blue

saycolor.

call

(yellow)

;// yellow

sayblue.

call

(yellow)

;// blue

sayblue.

(yellow)

;// blue

var sayyellow = sayblue.

bind

(yellow)

;sayyellow()

// blue

var sayyellow2 = saycolor.

bind

(yellow)

;sayyellow2()

// yellow

為了方便操作基本型別的值,ecmascript提供了三個特殊的引用型別,boolean、number、string。每當讀取乙個基本型別的值的時候,後台就會建立乙個對應的基本包裝型別的物件。從而可以讓我們能夠呼叫一些方法來操作這些資料。

var s1 =

"text"

;var s2 = s1.

substring(2

);

基本型別的值不是物件,所以從邏輯上講,他們不應該有方法。但是通過基本包裝型別的包裝。有了方法。

類似下面的執行過程。

var temp =

newstring

(s1)

;// 建立string 型別的例項

var s2 = temp.

substring(2

);// 在例項上呼叫制定方法

temp =

null

;// 銷毀例項

引用型別與基本包裝型別的主要區別是物件的生存期,new 操作符建立的引用型別在執行流離開當前作用域之前一直在記憶體中。而自動建立的基本包裝型別的物件,只存在於一行**執行的瞬間。然後立即銷毀。所以我們不能在執行的時候給基本型別值新增屬性和方法,因為每行建立的物件,該行執行完之後就銷毀了。

C 學習(三) 引用

為了說明c 中引用這個概念引入的意義,我們不妨從乙個最基礎的c語言交換兩個變數的值的函式說起 swap int a,int b 呼叫時,使用如下語句 swap a,b 這裡,傳遞的是變數a和b的位址,我們要交換a和b的值,函式卻用的是a和b的位址作為引數,感覺沒有那麼直觀形象。c 引入了 引用 這個...

C 核心程式設計(2) 引用

作用 給變數起別名 語法 資料型別 別名 原名 示例 int main 示例 int main 作用 函式傳參時,可以利用引用的技術讓形參修飾實參 優點 可以簡化指標修改實參 示例 1.值傳遞 void myswap01 int a,int b 2.位址傳遞 void myswap02 int a,...

CPP核心程式設計(2)引用

引用的使用如下 include using namespace std intmain 通過new建立陣列 堆區開闢的資料,由人手動開闢,釋放使用操作符delete 三種傳遞方式的區別 include using namespace std 值傳遞 void swap 1 int a,int b 位...