構(gòu)造函數(shù)與其他函數(shù)的唯一區(qū)別,就在于調(diào)用它們的方式不同。不過,構(gòu)造函數(shù)畢竟也是函數(shù), 不存在定義構(gòu)造函數(shù)的特殊語法。任何函數(shù),只要通過new操作符來調(diào)用,那它就可以作為構(gòu)造函數(shù);而任何函數(shù),如果不通過new操作符來調(diào)用,那它跟普通函數(shù)也不會(huì)有什么兩樣。南昌網(wǎng)絡(luò)公司技術(shù)員舉例說明:例如,前面例子中定義的Person()函數(shù)可以通過下列任何一種方式來調(diào)用:
//當(dāng)作構(gòu)造函數(shù)使用
var person=new Person("Nicholas",29,"Software Engineer");
person.sayName(); //“Nicholas"
//作為普通函數(shù)調(diào)用
Person("Greg",27,"Doctor"); //添加到window
window.sayName(); //"Greg"
//在另一個(gè)對象的作用域中調(diào)用
var o=new Object();
Person.call(o,"Kristen",25,"Nurse");
o.sayName(); //"Kristen"
這個(gè)例子中的前兩行代碼展示了構(gòu)造函數(shù)的典型用法,即使用new操作符來創(chuàng)建一個(gè)新對象。接下來的兩行代碼展示了不使用new操作符調(diào)用Person()會(huì)出現(xiàn)什么結(jié)果:屬性和方法都被添加給wind。w對象了。有讀者可能還記得,當(dāng)在全局作用域中調(diào)用一個(gè)函數(shù)時(shí),this對象總是指向Global對象(在瀏覽器中就是window對象)。因此,在調(diào)用完函數(shù)之后,可以通過window對象來調(diào)用sayName()方法,并且還返回了"Greg"。最后,也可以使用call()(或者apply())在某個(gè)特殊對象的作用域中調(diào)用Person()函數(shù)。這里是在對象O的作用域中調(diào)用的,因此調(diào)用后O就擁有了所有屬性和sayName()方法
本文僅限于南昌網(wǎng)站設(shè)計(jì)公司百恒網(wǎng)絡(luò)內(nèi)容技術(shù)人員查看,請勿作其他商業(yè)用途. 文章出自:南昌網(wǎng)絡(luò)公司-百恒網(wǎng)絡(luò) http://www.gimmickmag.com 如轉(zhuǎn)載請注明出處!