为了账号安全,请及时绑定邮箱和手机立即绑定

1.2单例模式,工厂模式,面向对象,继承

标签:
JavaScript
一、单例模式

1.对象数据类型作用:
把描述同一个事物(同一个对象)属性和方法放在一个内存空间中,起到分组作用,不同事物之间的属性即使属性名相同,相互也不会发生冲突;

2.单例模式:
    我们把这种分组编写代码模式叫做“单例模式”;
    作用就是对象数据类型分组;
    在单例模式中,我们的变量名叫做命名空间;
    命名空间:就是我们对象开辟的一个引用空间地址赋值一个变量,我们只是给我们引用地址起了一个名字;
    所谓的单例模式就是把描述事物的属性和方法放在一个命名空间下,避免了全局变量的污染;

    单例模式是项目开发中设计模式之一,我们团队协作模块化开发基本上都是基于模块化开发,避免代码冲突;
// 单例模式规范写法:
    var nameSpace = (function () {
        return {
            init: function () {},
            sum: function () {}
        }
    })()
    nameSpace.init();
    nameSpace.sum();

模块开发:对于相对于比较大的项目,需要多人协作开发,我们一般情况下会根据几个功能模板开发,多人写作开发;

二、工厂模式
提现了函数的封装,把一个功能进行封装,这种批量生产的模式就是工厂模式

三、面向对象思想(oop) object oriented programming
面向对象的3个概念: 对象,类,实例
对象:js中一切都是需要学习和研究的对象;
类:对对象的具体细分,具体的分类;例如自然界植物类,动物类,js中函数类,内置类
实例:每一个类中具体事物;
研究对象中类的实例的过程就是面向对象;
js本身就是基于面向对象的思想构造出来的语言,所以说js中有很多的内置类;

每一个数据类型,都一个自己所属的内置类,数据类型的值,都是所属类的实例;
每一个数据类型使用的方法,都是当前所属类提前设定好的方法,所以我们各自的实例才可以调用这些方法;
new Number :每一个数字都是它类的实例;
new String:每一个字符串都是String类的实例;
Boolean,Regexp,Array,Object,Function,Date等;
比如 Array.prototype,我们在数组原型上查看数组类提供的方法,这些方法都是提供给数组实例提供的方法;

元素或者节点集合类:
HTMLContent.prototype 元素集合类,通过dom获取到的元素集合都是他的实例;
nodeList:节点集合类,通过dom获取的节点集合都是他的实例;childNodes

dom元素标签对象的内置类:每一个元素标签都有一个自己对应的内置类;

四、构造函数模式(自定义类)constructor

基于面向对象编辑思想,创建自定义类,基于自己自定义的类;
实例 instanceof 类 :instanceof 检测当前对象是否属于这个类;

typeof不能细分数组,正则;但是我们可以用instanceof进行细分,检测它是不是这个类的实例; [] instanceof Array 检测[]它是不是数组类型;
hasOwnProperty 检测私有属性
in 检测公有属性和私有属性;
![图片描述][1]
继承1:子b继承a,在b类中for in 遍历循环a的实例
 function A() {
        this.a="a";
    }
    function B() {
        this.b="b";
        A.call(this);
    }
    var b= new B;
    console.log(b);
    */

    function A() {
        this.a="a";
    }
    A.prototype.getA=function () {};

    function B() {
        this.b="b";
        var objA=new A;
        for(var key in objA){
            //this[key]=objA[key]
            if(objA.hasOwnProperty(key)){
                this[key]=objA[key]
            }else {
                //this.__proto__[key]=objA[key];
                B.prototype[key]=objA[key]
            }
        }
    }
    B.prototype.getB=function () {};
    var b= new B;
    console.log(b);

继承2:
function A () {this.a = 'a'}
    A.prototype.geta = function () {console.log(this)}
    function B () {this.b = 'b'}
    B.prototype.getb = function () {console.log(this)}

    B.prototype = Object.assign(B.prototype,A.prototype)
    console.log(new B)
    // Object.assign(对象B,对象A),将对象A合并到对象B上*/
继承3:
b继承a,b.prototype = a.prototype
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消