资讯专栏INFORMATION COLUMN

[js高手之路] es6系列教程 - 新的类语法实战选项卡

yintaolaowanzi / 2406人阅读

摘要:其实的面向对象很多原理和机制还是的,只不过把语法改成类似和老牌后端语言中的面向对象语法一用封装一个基本的类是不是很向和中的类其实本质还是原型链,我们往下看就知道了首先说下语法规则中的就是类名,可以自定义就是构造函数,这个是关键字,当实例化对

其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法.

一、用es6封装一个基本的类

class Person{
            constructor( uName ){
                this.userName = uName;
            }
            sayName(){
                return this.userName;
            }
        }
        

是不是很向php和java中的类, 其实本质还是原型链,我们往下看就知道了

首先说下语法规则:

class Person中的Person就是类名,可以自定义

constructor就是构造函数,这个是关键字,当实例化对象的时候,这个构造函数会被自动调用

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行实例化和调用方法还是跟es5一样

第4行和第5行判断对象是否是类(Person)和Object的实例, 结果跟es5一样, 这个时候,我们肯定会想到Person的本质是否就是一个函数呢

第7行完全验证了我们的想法,类Person本质就是一个函数

第8行可以看到sayName这个函数其实还是加在Person的原型对象上

第9行还是验证了es5的原型链特点:对象的隐式原型指向构造函数的原型对象

第10行验证oP对象通过原型链查找到sayName方法

这种类的语法,被叫做语法糖,本质还是原型链

二、利用基本的类用法,封装一个加法运算

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 ) );

三、利用基本的类语法,封装经典的选项卡

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代码:

1
2
3
4

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();
        }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88369.html

相关文章

  • [js高手之路]js单页hash路由原理与应用实战

    摘要:什么是路由通俗点说,就是不同的显示不同的内容什么是单页应用单页,英文缩写为,就是把各种功能做在一个页面内那所谓的单页路由应用就是在一个页面内,通过切换地址栏的来实现切换内容的变化如何知道切换了呢当后面的锚文本发生变化时,会触发事件。 什么是路由? 通俗点说,就是不同的URL显示不同的内容 什么是单页应用? 单页,英文缩写为SPA( Single Page Application),就是...

    tinna 评论0 收藏0
  • [js高手之路]设计模式系列课程-发布者,订阅者重构购物车

    摘要:发布者订阅者模式,是一种很常见的模式,比如一买卖房子生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色中介拿到卖主的房源信息,根据手头上掌握的客户联系信息买房的人的手机 发布者订阅者模式,是一种很常见的模式,比如: 一、买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,...

    fevin 评论0 收藏0
  • [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配

    摘要:还记得我们上文中的文件吗那里面的标签还是写死的文件,那么怎么把他们变成动态的文件,这个动态生成的文件会动态引入我们打包后生成的文件呢,我们可以使用插件,首先安装这个插件,好的,接下来就开始用这个插件了官方参考文档插件通用用法 还记得我们上文中的index.html文件吗? 那里面的script标签还是写死的index.bundle.js文件,那么怎么把他们变成动态的index.html...

    qpal 评论0 收藏0
  • 2017年1月前端月报

    摘要:平日学习接触过的网站积累,以每月的形式发布。年以前看这个网址概况在线地址前端开发群月报提交原则技术文章新的为主。 平日学习接触过的网站积累,以每月的形式发布。2017年以前看这个网址:http://www.kancloud.cn/jsfron... 概况 在线地址:http://www.kancloud.cn/jsfront/month/82796 JS前端开发群月报 提交原则: 技...

    FuisonDesign 评论0 收藏0

发表评论

0条评论

yintaolaowanzi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<