美文网首页
JavaScript中对象的构造模式(类的模仿)

JavaScript中对象的构造模式(类的模仿)

作者: 没个性的七秒鱼 | 来源:发表于2016-09-30 13:30 被阅读0次

    为什么叫类的模仿,因为JS中没有类的概念,也就是没有class这个东东,毕竟是为了赶时髦才加上java这个词的,跟java可是一点关系没有,也没有java中典型的class的概念,但是作为一门强大的脚本语言如何去面向对象呢,那就是利用构造函数模仿类的功能

    1、工厂模式创建对象

    这是最原始的创建对象的方法,原理也很简单,就是封装了一个返回值为对象的函数

    function createObject(name,age){
        var o = new Object();
        o.name = name;
        o.age = age;
        o.sayName = function(){
            alert(this.name);
        }
        return o;
    }
    var person1 = createObject('小明','18');
    person1.sayName();
    var person2 = createObject('小红','17');
    person2.sayName();
    

    这样就能通过函数createObject不断的创建对象了,但是,我们想模仿的是类的概念,但是这里所创建的每一个对象都没有办法识别是什么类型,看下面代码:

    alert(person1 instanceof Object); //true
    alert(person2 instanceof Object); //true
    

    这里创建出来的变量person1和person2都是Object类型的,并不符合面向对象里面的'分类'的概念,比如我想让创建出来的对象都属于一个范畴的,就拿这里的person1和person2来说,这两个对象应该都属于人的范围,应该有一个代表人的类型来专门给他们分类,为了解决这个问题,就有了第二种方法:

    2、构造函数创建对象

    通过一个构造函数来创建对象

    function person(name,age){
        this.name = name;
        this.age = age;
        this.sayName = function(){
            alert(this.name);
        }
    }
    person1 = new person('小明',18);
    person2 = new person('小红',17);
    person1.sayName();   //小明
    person2.sayName();   //小红
    

    这种方法很好的解决了对象识别的问题,如下代码:

    alert(person1 instanceof Object); //true
    alert(person1 instanceof person); //true
    alert(person2 instanceof Object); //true
    alert(person2 instanceof person); //true
    

    会发现person1和person2不仅是object类型的实例,还都是person类型的实例
    构造函数方法创建对象能够满足最基本“类的模仿”,但严格来说还有很多问题,比如这里用构造函数每创建一个对象就要单独开辟一块内存空间,但实际上对象里的很多属性常常是可以共用的,比如说这里的sayName方法,每个对象里都有这个方法,为什么不在内存空间里只开辟一块地方存它,然后让所有对象都从这块地方调用它呢,为了实现这个原理,就有了原型的使用。

    3、JS中的原型

    未完待续~

    相关文章

      网友评论

          本文标题:JavaScript中对象的构造模式(类的模仿)

          本文链接:https://www.haomeiwen.com/subject/uvglyttx.html