一、 建構函式一般以大寫字母開頭(大寫小都可以,規範是大寫開頭)
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...