您好,登錄后才能下訂單哦!
一.構(gòu)造函數(shù)
專門用來生成“對(duì)象”的和水泥胡,構(gòu)造函數(shù)是提供一個(gè)模板,描述對(duì)象的基本結(jié)構(gòu),一個(gè)構(gòu)造函數(shù)可以生成多個(gè)對(duì)象。
構(gòu)造函數(shù)的特點(diǎn):
(1)函數(shù)體內(nèi)部使用了this關(guān)鍵字,代表了所要生成的對(duì)象的實(shí)例
(2)生成對(duì)象的時(shí)候,必須要new命令,來調(diào)用函數(shù)。
二.New命令
New命令的作用,就是執(zhí)行構(gòu)造函數(shù),返回一個(gè)實(shí)例對(duì)象。
如果忘了使用new命令,直接調(diào)用構(gòu)造函數(shù)會(huì)發(fā)生什么事?
這種情況下,構(gòu)造函數(shù)就變成了普通函數(shù),并不會(huì)生成實(shí)例對(duì)象。此時(shí)this這時(shí)代表全局對(duì)象。避免出現(xiàn)不使用new命令、直接調(diào)用構(gòu)造函數(shù)的情況。為了保證構(gòu)造函數(shù)必須與new命令一起使用,一個(gè)解決辦法是,在構(gòu)造函數(shù)內(nèi)部使用嚴(yán)格模式,即第一行加上use strict。
New 命令的原理
(1)創(chuàng)建一個(gè)空對(duì)象,作為將要返回的對(duì)象實(shí)例
(2)將這個(gè)空對(duì)象的原型,指向構(gòu)造函數(shù)的prototype屬性
(3)將這個(gè)空對(duì)象賦值給函數(shù)內(nèi)部的this關(guān)鍵字
(4)開始執(zhí)行構(gòu)造函數(shù)內(nèi)部的代碼
var a =new A()
(1)var a = new obiect();
(2)a._proto_ = A.prototype;
(3)A.call(a);
(4)執(zhí)行構(gòu)造函數(shù)里面的代碼
如果構(gòu)造函數(shù)內(nèi)部有return語句,而且return后面跟著一個(gè)對(duì)象,new命令會(huì)返回return語句指定的對(duì)象;否則,就會(huì)不管return語句,返回this對(duì)象。
如果對(duì)普通函數(shù)(內(nèi)部沒有this關(guān)鍵字的函數(shù))使用new命令,則會(huì)返回一個(gè)空對(duì)象。
function getMessage() {
return 'this is a message';
}
var msg = new getMessage();
console.log(msg); // getMessage {}
console.log(typeof msg);//object
這是因?yàn)閚ew命令總是返回一個(gè)對(duì)象,要么是實(shí)例對(duì)象,要么是return語句指定的對(duì)象。本例中,return語句返回的是字符串,所以new命令就忽略了該語句。
參考:http://javascript.ruanyifeng.com/oop/basic.html
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。