JavaScript中new操作符有什么用

這篇文章給大家分享的是有關(guān)JavaScript中new操作符有什么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、建始網(wǎng)站維護(hù)、網(wǎng)站推廣。

 js模擬new操作符的實(shí)現(xiàn)

這個(gè)問題如果你在掘金上搜,你可能會(huì)搜索到類似下面的回答:

JavaScript中new操作符有什么用 說實(shí)話,看第一遍,我是不理解的,我需要去理一遍原型及原型鏈的知識(shí)才能理解。所以我覺得MDN對(duì)new的解釋更容易理解:

new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象的實(shí)例。new 關(guān)鍵字會(huì)進(jìn)行如下的操作:

  1. 創(chuàng)建一個(gè)空的簡(jiǎn)單JavaScript對(duì)象(即{});

  2. 鏈接該對(duì)象(即設(shè)置該對(duì)象的構(gòu)造函數(shù))到另一個(gè)對(duì)象 ;

  3. 將步驟1新創(chuàng)建的對(duì)象作為this的上下文 ;

  4. 如果該函數(shù)沒有返回對(duì)象,則返回this。

接下來我們看實(shí)現(xiàn):

function Dog(name, color, age) {
  this.name = name;
  this.color = color;
  this.age = age;}Dog.prototype={
  getName: function() {
    return this.name  }}var dog = new Dog('大黃', 'yellow', 3)

上面的代碼相信不用解釋,大家都懂。我們來看最后一行帶new關(guān)鍵字的代碼,按照上述的1,2,3,4步來解析new背后的操作。

第一步:創(chuàng)建一個(gè)簡(jiǎn)單空對(duì)象

var obj = {}

第二步:鏈接該對(duì)象到另一個(gè)對(duì)象(原型鏈)

// 設(shè)置原型鏈obj.__proto__ = Dog.prototype

第三步:將步驟1新創(chuàng)建的對(duì)象作為 this 的上下文

// this指向obj對(duì)象Dog.apply(obj, ['大黃', 'yellow', 3])

第四步:如果該函數(shù)沒有返回對(duì)象,則返回this

// 因?yàn)?nbsp;Dog() 沒有返回值,所以返回objvar dog = obj
dog.getName() // '大黃'

需要注意的是如果 Dog() 有 return 則返回 return的值

var rtnObj = {}function Dog(name, color, age) {
  // ...
  //返回一個(gè)對(duì)象
  return rtnObj}var dog = new Dog('大黃', 'yellow', 3)console.log(dog === rtnObj) // true

接下來我們將以上步驟封裝成一個(gè)對(duì)象實(shí)例化方法,即模擬new的操作:

function objectFactory(){
    var obj = {};
    //取得該方法的第一個(gè)參數(shù)(并刪除第一個(gè)參數(shù)),該參數(shù)是構(gòu)造函數(shù)
    var Constructor = [].shift.apply(arguments);
    //將新對(duì)象的內(nèi)部屬性__proto__指向構(gòu)造函數(shù)的原型,這樣新對(duì)象就可以訪問原型中的屬性和方法
    obj.__proto__ = Constructor.prototype;
    //取得構(gòu)造函數(shù)的返回值
    var ret = Constructor.apply(obj, arguments);
    //如果返回值是一個(gè)對(duì)象就返回該對(duì)象,否則返回構(gòu)造函數(shù)的一個(gè)實(shí)例對(duì)象
    return typeof ret === "object" ? ret : obj;}

感謝各位的閱讀!關(guān)于“JavaScript中new操作符有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

新聞標(biāo)題:JavaScript中new操作符有什么用
路徑分享:http://bm7419.com/article16/jdohgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、App設(shè)計(jì)、外貿(mào)建站、網(wǎng)站導(dǎo)航、網(wǎng)站營(yíng)銷、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司