建構函式 和 this

2021-10-03 23:42:27 字數 1998 閱讀 2982

一、 建構函式一般以大寫字母開頭(大寫小都可以,規範是大寫開頭)

function

fruits

(type=

, color=

"red"

)

二、建構函式會執行以下幾個過程:

(1)使用new關鍵字呼叫時,會建立乙個新的記憶體空間

(2)函式體內部的this指向該記憶體

(3)執行函式體內的**:給this新增屬性,就相當於給例項新增屬性

(4)預設返回this

var p1 =

newfruits(,

'red');

// 這種情況每new乙個物件,就回建立乙個新的記憶體空間

p1.type=

'banana'

console.

log(

newfruits()

)console.

log(p1)

//

三、深究建構函式的返回值:

1、預設返回this

2、手動新增返回值:

1) 如果是基本資料型別,最終還是返回this

2)如果是複雜的資料型別(物件),最終返回該物件

2、(1)

function

fruits1()

var f1 =

newfruits1()

;var f1_1 =

fruits1()

//以上例子是普通函式呼叫,則返回50;

console.

log(f1)

//console.

log(f1_1 )

//50

2、(2)

function

fruits2()

var f2 =

newfruits2()

;console.

log(f2)

//[ 'a', 'b', 'c', 'd' ]

console.

log(f2.type)

;//undefined

console.

log(f2.length)

;//4

console.

log(f2[0]

);//a

四、用new 和不用new 呼叫建構函式有什麼不同?

1、用new呼叫

1)建立乙個this變數,該變數指向乙個空物件,並且該物件繼承函式的原型

2)屬性和方法會被加入this引入的物件中;

3)若沒有顯性(指定)返回其它物件,則**(預設)返回this物件。

用偽程式來展示以上過程:

function

fruits

(type)

;this

.type = type;

this

.say

=function()

//返回this物件

return

this

;}

2、直接呼叫建構函式

this指向window,除了指定返回值,否則不會預設返回任何物件;

例子:

var f =

fruits()

;f()

;//undefined

window.name;

// 顯然這不是我們想要的結果

總結:

為了防止忘記使用new關鍵字而帶哦用建構函式,可以加一些判斷條件強行呼叫new

function

fruits

(type)

this

.type = type;

...}

建構函式和拷貝建構函式

建構函式 簡單地說建構函式是類函式,函式名與類名完全相同,無返回值 建構函式屬於類的成員函式,除了具有一般成員函式的特點外,還具有自己的特點 1 是類的乙個特殊的成員函式,函式名與類名相同 2 訪問屬性應該是public 3 功能是初始化物件,在建構函式中一般不作初始化以外的事情 4 可以在類內定義...

函式和建構函式

函式使用function關鍵字來定義,可以用在函式定義表示式或函式宣告語句中。函式呼叫的4種方法 1 作為函式 1 這是乙個普通函式 2function range 3 函式表示式 4var range function 56 呼叫7 range 2 作為建構函式 看建構函式部分 3 作為方法 1 ...

拷貝建構函式和賦值建構函式

class cmystring 賦值建構函式 cmystring cmystring operator const cmystring str 新分配記憶體,將str的m pdata記憶體拷貝到m pdata中 m pdata new char strlen str.m pdata 1 strcpy...