欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript-面向对象与原型

程序员文章站 2022-05-23 15:05:55
...

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>

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

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

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运算符。