JavaScript面向对象变成的几种写法

1.模块化

(function (){
    function Tab(options){//构造函数
        // this.init(options);
    }
    // 初始化方法
    Tab.prototype.init = function (options){//初始化方法
        // 获取元素
        this.tits = this.getElements(options.tits);//添加属性
        this.cons = this.getElements(options.cons);//添加属性
        return this;//返回实例化对象,这样可以方便链式操作
    }
    // 设置类名的方法
    Tab.prototype.setClass = function (dom,oClass){
        dom.className = oClass;
    }
    // 获取元素的方法
    Tab.prototype.getElements = function (selector){
        return document.querySelectorAll(selector);
    }
    // 获取当前下标
    Tab.prototype.getIndex = function (){
        return this.prevIndex;
    }
   	}
    // 返回一个实例对象
    function factory(options){
        return new Tab().init(options)
    }
    window.tab = factory;// 对外公开接口
})();

var tab1 = tab({
    tits: '.part1 .header h3',
    cons: '.part1 .content div',
    showIndex: 3
});

这种动态添加方法到原型上的方法比较繁琐,每次都要写 类名.prototype.方法名

2.模块化二

(function (){
    function Tab(options){
        this.init(options);
    }
    // 原型对象上的属性方法
    Tab.prototype = {
        constructor: Tab,//指正构造器
        init: function (options){
            // 获取元素
            this.tits = this.getElements(options.tits);
            this.cons = this.getElements(options.cons);
            return this;// 链式调用需要
        },
        setClass: function (dom,oClass){
            dom.className = oClass;
        },
        getElements: function (selector){
            return document.querySelectorAll(selector);
        },
        getIndex: function (){
            return this.prevIndex;
        },
    }
    // 返回一个实例对象
    function factory(options){
        return new Tab(options);
    }
    window.tab = factory;// 对外公开接口
})();

var tab1 = tab({
    tits: '.part1 .header h3',
    cons: '.part1 .content div',
    showIndex: 3
});

这种跟第一种很类似,只不过添加原型上的方法的方式不同,这种方法需要指正构造器。

3.模块化三

(function (){
    function Tab(options){
        this.init(options);
    }
    // 原型对象上的属性方法
    Tab.prototype = {
        constructor: Tab,//指正构造器
        init: function (options){
            // 获取元素
            this.tits = this.getElements(options.tits);
            this.cons = this.getElements(options.cons);
            return this;// 链式调用需要
        },
        setClass(dom,oClass){
            dom.className = oClass;
        },
        getElements(selector){
            return document.querySelectorAll(selector);
        },
        getIndex(){
            return this.prevIndex;
        },
    }
    // 返回一个实例对象
    function factory(options){
        return new Tab(options);
    }
    window.tab = factory;// 对外公开接口
})();

var tab1 = tab({
    tits: '.part1 .header h3',
    cons: '.part1 .content div',
    showIndex: 3
});

这种方法将原型添加方法的function关键字强调了,跟ES6的class很像

4.ES6的class语法糖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值