成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS實(shí)現(xiàn)一個(gè)new

tianyu / 2678人閱讀

摘要:實(shí)現(xiàn)一個(gè)代碼如下小白實(shí)現(xiàn)小黑解析思路創(chuàng)建一個(gè)新對(duì)象把的指向?qū)崿F(xiàn)繼承執(zhí)行構(gòu)造函數(shù)傳遞參數(shù)改變指向返回解析的第一個(gè)參數(shù)是返回的是的實(shí)參因此為獲取剩下的參數(shù)新建對(duì)象把新建對(duì)象的指向的原型鏈上傳遞參數(shù)改變指向執(zhí)行結(jié)果運(yùn)算符用于測(cè)試構(gòu)造函數(shù)的屬性是否

實(shí)現(xiàn)一個(gè)new
代碼如下:

var Dog = function(name) {
  this.name = name;
}
Dog.prototype.bark = function() {
  console.log("wang");
}
Dog.prototype.sayName = function() {
  console.log("my name is", this.name);
}

var xiaobai = new Dog("小白");
xiaobai.sayName();
xiaobai.bark();

//實(shí)現(xiàn)new
var _new = function() {
  var constructor = Array.prototype.shift.call(arguments);  //Dog
  var args = arguments;
  const obj = new Object();
  obj.__proto__ = constructor.prototype;
  constructor.call(obj, ...args);
  return obj;
}

var xiaohei = _new(Dog, "小黑");
xiaohei.bark();
xiaohei.sayName();

console.log(xiaohei instanceof Dog);    //true

解析

思路:

創(chuàng)建一個(gè)新對(duì)象obj

把obj的__proto__指向Dog.prototype實(shí)現(xiàn)繼承

執(zhí)行構(gòu)造函數(shù),傳遞參數(shù),改變this指向,Dog.call(obj, ...args)

返回obj

解析:

var constructor = Array.prototype.shift.call(arguments); //Dog
_new()的第一個(gè)參數(shù)是Dog,arguments返回的是_new的實(shí)參,因此constructor為Dog

var args = arguments; 獲取剩下的參數(shù)

const obj = new Object(); 新建對(duì)象

obj.__proto__ = constructor.prototype; 把新建對(duì)象的__proto__指向Dog的原型鏈上

constructor.call(obj, ...args);傳遞參數(shù),改變this指向

執(zhí)行結(jié)果

console.log(Dog.prototype);

console.log(xiaobai);

console.log(xiaohei);

console.log(xiaohei instanceof Dog); true

instanceof運(yùn)算符用于測(cè)試構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在對(duì)象的原型鏈中的任何位置

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105610.html

相關(guān)文章

  • 異步發(fā)展流程 —— 手寫一個(gè)符合 Promise/A+ 規(guī)范的 Promise

    摘要:構(gòu)造函數(shù)的實(shí)現(xiàn)我們?cè)谑褂玫臅r(shí)候其實(shí)是使用關(guān)鍵字創(chuàng)建了一個(gè)的實(shí)例,其實(shí)是一個(gè)類,即構(gòu)造函數(shù),下面來(lái)實(shí)現(xiàn)構(gòu)造函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018998456); 閱讀原文 概述 Promise 是 js 異步編程的一種解決方案,避免了 回調(diào)地獄 給編程帶來(lái)的麻煩,在 ES6 中成為了標(biāo)準(zhǔn),這篇文章重點(diǎn)不是敘...

    UnixAgain 評(píng)論0 收藏0
  • 從0到1實(shí)現(xiàn)Promise

    摘要:通過或者拿到方法回調(diào)函數(shù)的返回值,然后調(diào)用,將新增的的和傳入到中。打印結(jié)果實(shí)現(xiàn)方法接收一個(gè)包含多個(gè)的數(shù)組,當(dāng)有一個(gè)為狀態(tài)時(shí),整個(gè)大的為,并執(zhí)行回調(diào)函數(shù)。 前言 Promise大家一定都不陌生了,JavaScript異步流程從最初的Callback,到Promise,到Generator,再到目前使用最多的Async/Await(如果對(duì)于這些不熟悉的可以參考我另一篇文章《JavaScri...

    EddieChan 評(píng)論0 收藏0
  • JS中的面向?qū)ο缶幊?/b>

    摘要:一面向?qū)ο缶幊堂嫦驅(qū)ο缶幊淌且环N抽象方式創(chuàng)建模型的編程方式。繼承我們實(shí)現(xiàn)一個(gè)子類,繼承汽車類將類的屬性和方法賦值給繼承汽車類的原型鏈創(chuàng)建子類實(shí)例以上是中的面向?qū)ο缶幊痰暮?jiǎn)單介紹,如有錯(cuò)誤,歡迎指出。 一.面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?OOP--Object Oriented Programming)是一種抽象方式創(chuàng)建模型的編程方式。繼承,封裝,多態(tài)是OOP的三大基本特征。許多主流編程語(yǔ)言都...

    lunaticf 評(píng)論0 收藏0
  • DIP、IoC、DI、JS

    摘要:維基百科該原則規(guī)定高層次的模塊不應(yīng)該依賴與低層次的模塊,兩者都應(yīng)該依賴于抽象接口。依賴反轉(zhuǎn)原則則顛倒這種依賴關(guān)系,并以上面提到的兩個(gè)規(guī)定作為指導(dǎo)思想。維基百科這些話的意思就是將依賴對(duì)象的創(chuàng)建和綁定轉(zhuǎn)移到被依賴對(duì)象類的外部來(lái)實(shí)現(xiàn)。 在這個(gè)標(biāo)題中,除了 JS 是亂入之外,其它的幾個(gè)詞匯都是存在一個(gè)共同點(diǎn)的,那就是依賴。 那么,依賴是什么呢? 比如,現(xiàn)在我正在寫這篇博客文,但是我得在電腦上編...

    ssshooter 評(píng)論0 收藏0
  • js設(shè)計(jì)模式(一)-單例模式

    摘要:雖然是弱類型的語(yǔ)言,但是也有構(gòu)造函數(shù)和實(shí)例。也就是說,我們只在第一次調(diào)用構(gòu)造函數(shù)時(shí)創(chuàng)建新對(duì)象,之后調(diào)用返回時(shí)返回該對(duì)象即可。而我不認(rèn)為這是一個(gè)單例模式的原因如下我覺得既然兩次調(diào)用同一個(gè)構(gòu)造函數(shù),返回的不是同一個(gè)對(duì)象,那不就不能成為單例模式。 寫在前面 (度過一陣的繁忙期,又可以愉快的開始學(xué)習(xí)新知識(shí)了,一年來(lái)技術(shù)棧切來(lái)切去,卻總覺得js都還沒學(xué)完-_-) 本文主要圍繞js的設(shè)計(jì)模式進(jìn)行展...

    AlexTuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<