建構函式 JS函式的華麗轉身

2021-09-25 07:10:30 字數 1955 閱讀 9175

1.一般寫法規範

建構函式都應該以 乙個大寫字母開頭,eg:

function person()

而非建構函式則應該以乙個小寫字母開頭,eg:

function person()

2.呼叫方式

任何函式,只要通過 new 操作符來呼叫,那它就可以作為建構函式 ;

任何函式,如果不通過 new 操作符來呼叫,那它跟普通函式也沒有什麼兩樣。

//建立函式

function

person

(name,age,job)

}//當做建構函式使用

var person =

newperson

('nicholas',29

,'software engineer');

//過程:在new關鍵字宣告後,則會建立了乙個物件,並且person內部的this指向著這個物件,同時繼續執行person函式內部**,全部執行完後,則返回this所指向的物件

person.

sayname()

;//'nicholas'

//當做普通函式呼叫

person

('greg',27

,'doctor');

//返回值為undefined

//過程:因為函式外部沒有物件呼叫,所以函式內部this指向全域性物件window,繼續執行person函式

//又因為有this.name = name;等**,所以相當於執行了window.name = name

window.

sayname()

;//'greg'

函式如果有返回值的情況則分為引用型別和值型別兩種情況:

//函式顯式寫了返回值為引用型別時,

//1.當使用new之後,函式(包括建構函式)返回值為該引用型別

//2.當普通函式呼叫時,返回顯式的return值

function

test()

}var m=

newtest()

;// 內部this指向以test為建構函式的物件,但後面沒有返回引用,所以會被丟棄

var n=

test()

;// 內部this指向window全域性物件,其中 window.a = 10

console.

log(m)

;//返回return後面的閉包

console.

log(n)

;//返回return 後面的閉包

執行結果m的值和n的值是一樣的,都是test函式返回的閉包,而this引用的物件和this.a=10的賦值結果全部被丟棄。

如果乙個函式的返回值是乙個值型別,那麼這個函式作為建構函式用new運算子執行構造時,它的返回值將被丟棄。new 表示式的結果仍然是this所引用的物件。

//當函式顯式寫了返回值為原始資料型別時,

//1.當使用new之後,函式(包括建構函式)返回原this物件,該物件的constructor(該屬性繼承自該函式的原型物件)指向著該函式。

//2.在普通函式呼叫下,返回顯式的return值

function

test()

var m=

newtest()

;//m為物件,m.constructor --> function test()

//m的constructor屬性繼承自test.propertype原型物件(每個函式都有著原型物件)

//m.__proto__ === test.propertype

var n=

test()

;//n為1,其中 window.a = 10

console.

log(m)

//返回[object]

console.

log(n)

//返回1.

RyuJIT的華麗轉身

ryujit是作為.net即時編譯器的代號稱謂,它是.net執行時的基本元件之一。與此相反的是,roslyn作為c 編譯器,其編譯c 成為il位元組碼。然後,其再將il位元組碼編譯成相對於多種處理器的機器碼。隨著最近對dotnet coreclr 18064的合併,將生成元件的遺留 來自較老的jit...

js建構函式

1 經典例項,涵蓋全域性變數,區域性變數,變數宣告提公升,物件,上下文,閉包等知識 var num 4 var obj this.num 2 num 3 alert num var fn obj.fn window.num 8 num nan num 4 fn function alert num ...

JS建構函式

建立乙個物件可以字面量建立或建構函式建立 字面量建立物件例如 字面量建立物件 var p1 但如果需要建立多個同一型別 屬性和方法都相同 的物件,使用字面量不合適,可以使用建構函式建立 宣告建構函式的語法和普通函式相同,但是建構函式的函式名首字母大寫 function student name,st...