溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Js中構(gòu)造函數(shù)與new命令的學(xué)習(xí)筆記

發(fā)布時(shí)間:2020-07-01 18:49:49 來源:網(wǎng)絡(luò) 閱讀:937 作者:蝸牛oscersong 欄目:開發(fā)技術(shù)

一.構(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

向AI問一下細(xì)節(jié)

免責(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)容。

AI