摘要:實(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為Dogvar 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
摘要:構(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)不是敘...
摘要:通過或者拿到方法回調(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...
摘要:一面向?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ǔ)言都...
摘要:維基百科該原則規(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)在我正在寫這篇博客文,但是我得在電腦上編...
摘要:雖然是弱類型的語(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)行展...
閱讀 1218·2021-11-17 09:33
閱讀 3629·2021-09-28 09:42
閱讀 3357·2021-09-13 10:35
閱讀 2517·2021-09-06 15:00
閱讀 2457·2021-08-27 13:12
閱讀 3621·2021-07-26 23:38
閱讀 1873·2019-08-30 15:55
閱讀 553·2019-08-30 15:53