摘要:其實(shí)的面向?qū)ο蠛芏嘣砗蜋C(jī)制還是的,只不過把語法改成類似和老牌后端語言中的面向?qū)ο笳Z法一用封裝一個基本的類是不是很向和中的類其實(shí)本質(zhì)還是原型鏈,我們往下看就知道了首先說下語法規(guī)則中的就是類名,可以自定義就是構(gòu)造函數(shù),這個是關(guān)鍵字,當(dāng)實(shí)例化對
其實(shí)es6的面向?qū)ο蠛芏嘣砗蜋C(jī)制還是ES5的,只不過把語法改成類似php和java老牌后端語言中的面向?qū)ο笳Z法.
一、用es6封裝一個基本的類
class Person{ constructor( uName ){ this.userName = uName; } sayName(){ return this.userName; } }
是不是很向php和java中的類, 其實(shí)本質(zhì)還是原型鏈,我們往下看就知道了
首先說下語法規(guī)則:
class Person中的Person就是類名,可以自定義
constructor就是構(gòu)造函數(shù),這個是關(guān)鍵字,當(dāng)實(shí)例化對象的時候,這個構(gòu)造函數(shù)會被自動調(diào)用
let oP = new Person( "ghostwu" ); console.log( oP.sayName() ); //ghostwu console.log( oP instanceof Person ); //true console.log( oP instanceof Object ); //true console.log( typeof Person ); //function console.log( typeof Person.prototype.sayName ); //function console.log( oP.__proto__ === Person.prototype ); //true console.log( "sayName" in oP ); //true console.log( Person.prototype );
第1行和第2行實(shí)例化和調(diào)用方法還是跟es5一樣
第4行和第5行判斷對象是否是類(Person)和Object的實(shí)例, 結(jié)果跟es5一樣, 這個時候,我們肯定會想到Person的本質(zhì)是否就是一個函數(shù)呢
第7行完全驗(yàn)證了我們的想法,類Person本質(zhì)就是一個函數(shù)
第8行可以看到sayName這個函數(shù)其實(shí)還是加在Person的原型對象上
第9行還是驗(yàn)證了es5的原型鏈特點(diǎn):對象的隱式原型指向構(gòu)造函數(shù)的原型對象
第10行驗(yàn)證oP對象通過原型鏈查找到sayName方法
這種類的語法,被叫做語法糖,本質(zhì)還是原型鏈
二、利用基本的類用法,封裝一個加法運(yùn)算
class Operator{ constructor( n1 = 1, n2 = 2 ){ this.num1 = n1; this.num2 = n2; } add( n1 = 10, n2 = 20 ){ let num1 = n1 || this.num1, num2 = n2 || this.num2; return num1 + num2; } } var oper = new Operator(); console.log( oper.add( 100, 200 ) );
三、利用基本的類語法,封裝經(jīng)典的選項(xiàng)卡
css代碼:
#tab div { width: 200px; height: 200px; border: 1px solid #000; display: none; } #tab div:nth-of-type(1) { display: block; } .active { background: yellow; }
html代碼:
1234
javascript代碼:
window.onload = () => { class Tab { constructor( context ) { let cxt = context || document; this.aInput = cxt.querySelectorAll( "input" ); this.aDiv = cxt.querySelectorAll( "div" ); } bindEvent(){ let targetId = null; this.aInput.forEach(( ele, index )=>{ ele.addEventListener( "click", ()=>{ targetId = ele.dataset.target; this.switchTab( ele, targetId ); }); }); } switchTab( curBtn, curId ){ let oDiv = document.querySelector( curId ); this.aDiv.forEach(( ele, index )=>{ ele.style.display = "none"; this.aInput[index].className = ""; }); curBtn.className = "active"; oDiv.style.display = "block"; } } new Tab( document.querySelector( "#tab" ) ).bindEvent(); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88369.html
摘要:什么是路由通俗點(diǎn)說,就是不同的顯示不同的內(nèi)容什么是單頁應(yīng)用單頁,英文縮寫為,就是把各種功能做在一個頁面內(nèi)那所謂的單頁路由應(yīng)用就是在一個頁面內(nèi),通過切換地址欄的來實(shí)現(xiàn)切換內(nèi)容的變化如何知道切換了呢當(dāng)后面的錨文本發(fā)生變化時,會觸發(fā)事件。 什么是路由? 通俗點(diǎn)說,就是不同的URL顯示不同的內(nèi)容 什么是單頁應(yīng)用? 單頁,英文縮寫為SPA( Single Page Application),就是...
摘要:發(fā)布者訂閱者模式,是一種很常見的模式,比如一買賣房子生活中的買房,賣房,中介就構(gòu)成了一個發(fā)布訂閱者模式,買房的人,一般需要的是房源,價格,使用面積等信息,他充當(dāng)了訂閱者的角色中介拿到賣主的房源信息,根據(jù)手頭上掌握的客戶聯(lián)系信息買房的人的手機(jī) 發(fā)布者訂閱者模式,是一種很常見的模式,比如: 一、買賣房子 生活中的買房,賣房,中介就構(gòu)成了一個發(fā)布訂閱者模式,買房的人,一般需要的是房源,價格,...
摘要:還記得我們上文中的文件嗎那里面的標(biāo)簽還是寫死的文件,那么怎么把他們變成動態(tài)的文件,這個動態(tài)生成的文件會動態(tài)引入我們打包后生成的文件呢,我們可以使用插件,首先安裝這個插件,好的,接下來就開始用這個插件了官方參考文檔插件通用用法 還記得我們上文中的index.html文件嗎? 那里面的script標(biāo)簽還是寫死的index.bundle.js文件,那么怎么把他們變成動態(tài)的index.html...
摘要:平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個網(wǎng)址概況在線地址前端開發(fā)群月報提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發(fā)群月報 提交原則: 技...
閱讀 1952·2023-04-26 01:56
閱讀 3122·2021-11-18 10:02
閱讀 3074·2021-09-09 11:35
閱讀 1310·2021-09-03 10:28
閱讀 3430·2019-08-29 18:36
閱讀 2860·2019-08-29 17:14
閱讀 843·2019-08-29 16:10
閱讀 1625·2019-08-26 13:45