JavaScript-面向对象与原型

JavaScript-面向对象与原型

一、前言

       ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。
      面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但ECMAScript没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。

二、创建对象最基本的方式:创建一个对象,然后给这个对象新建属性和方法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>面向对象和原型</title>
</head>
<body>
    <script type="text/javascript">
        var obj = new Object();
        obj.name = '胖彤';
        obj.sex = '女';
        obj.sayHello = function (){
            return '大家好,我是'+this.name+'性别'+this.sex;
        };
        alert(obj.sayHello());
    </script>
</body>
</html>

缺点:如果要创建一个类似的对象,就会输出大量代码,就会出现实例对象产生大量重复代码。

三、工厂模式——解决实例化对象产生大量重复的问题

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>面向对象和原型</title>
</head>
<body>
    <script type="text/javascript">
        function Student(name,sex){
            var obj = new Object();
            obj.name = name;
            obj.sex = sex;
            obj.sayHello = function (){
                return '大家好,我是'+this.name+'性别'+this.sex;
            };
            return obj;
        }
        var student1 = Student('胖彤','女');
        var student2 = Student('帅彤','男');
        alert(student1.sayHello());      //大家好,我是胖彤性别女
        alert(student2.sayHello());      //大家好,我是帅彤性别男
    </script>
</body>
</html>

缺点:
       工厂模式解决了重复实例化的问题,但还有一个问题,那就是识别问题,根本无法搞清楚他们到底是哪个对象的实例。
缺点

四、采用构造函数(构造方法)来创建特定的对象

ECMAScript中可以采用构造函数(构造方法)可用来创建特定的对象。类型于Object对象。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>面向对象和原型</title>
</head>
<body>
    <script type="text/javascript">
        function Student(name,sex){
            this.name = name;
            this.sex = sex;
            this.sayHello = function (){
                return '大家好,我是'+this.name+'性别'+this.sex;
            };
        }
        var student1 = new Student('胖彤','女');
        var student2 = new Student('帅彤','男');
        alert(student1.sayHello());      //大家好,我是胖彤性别女
        alert(student2.sayHello());      //大家好,我是帅彤性别男

        alert(typeof student1);               //object
        alert(student1 instanceof Student);    //true    很清晰的识别属于Student
    </script>
</body>
</html>

优点:
使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题

五、使用构造函数的方法,和使用工厂模式的方法不同之处

  1. 构造函数方法没有显式的创建对象(new Object())。
  2. 直接将属性和方法赋值给this对象。
  3. 没有renturn语句。

六、使用构造函数的方法,有一些规范

  1. 函数名和实例化构造名相同且大写(非强制,但这么写有助于区分构造函数和普通函数)。
  2. 通过构造函数创建对象,必须使用new运算符。

猜你喜欢

转载自blog.csdn.net/sinat_38328891/article/details/79900160