JavaScript学习——面向对象(一)——创建对象(工厂模式和构造器模式)

创建对象

  使用object函数和对象字面量可以创建对象,但是这两种方法也有明显的不足:如创建具有相同接口的多个对象需要编写很多重复的代码。es6提供了类和继承,注意:这个是封装了es5构造函数加原型继承的语法糖而已;

创建对象的方式:

1,使用工厂模式创建对象:

  使用工厂模式创建对象就是创建一个Object对象,再给对象添加属性和方法,工厂模式虽然解决了创建多个相同的对象创建的问题,但是不能识别对象的类型。

<!DOCTYPE html>
<html>
    <head>
        <meta  charset="UTF-8">
        <title>创建对象的几种方式-工厂模式</title>
        <script>
            function createPerson(name,age,job){
                var obj=new Object();
                obj.name=name;
                obj.age=age;
                obj.job=job;
                obj.sayName=function(){
                    alert("我的名字是"+this.name);
                }

                return obj;
            }

            var person1=createPerson("猪八戒",28,"医生");
            var person2=createPerson("孙悟空",18,"教师");
        </script>
    </head>
    <body>
        
    </body>
</html>

 

2,使用构造器模式创建对象


function Person(name, age) {
  this.name = name
  this.age = age
  this.say = function () {
    console.log(this.name)
  }
}
let p1 = new Person('张三', 20)
let p2 = new Person('张三', 39)
p1.say()
p2.say()

从代码可以看出,构造模式和工厂创建的对象的区别是:

  没有显示的创建对象

  直接将属性和方法赋值给了this对象

  没有return语句

创建构造函数的注意事项:构造函数的名称第一个字母应该大写,普通 的函数的名称都是小写,构造本身也是函数,也能够被调用。

使用构造函数创建一个对象必须要使用new操作符,使用new操作符调用构造函数经历的4个步骤:

  创建一个新对象

  将构造函数的作用域赋值给新对象(this指向了这个对象)

  执行构造函数中的代码(为对象添加属性和方法)

  返回一个新的对象

构造函数也是一个函数

 构造函数和其他函数的不同就是调用方法不同,除此之外,构造函数也是函数,并没有把某个函数定义为构造函数的特殊语法,任何函数只要使用了new操作符都可以当做构造函数来使用,如果不适用new操作符,那么就是当做普通函数来使用的,因此前面的构造函数也可以当做普通的函数来进行调用:

function Person(name, age) {
    this.name = name
    this.age = age
    this.say = function () {
        console.log(this.name)
    }
}
Person('李四', 20)

 

这个时候this指向是window,在调用一个函数并且没有特定的指向的时候,this对象始终是执行window的,如果是使用了call或者是apply等,那么this就是指向了那个对象。 

 

posted @ 2020-08-05 09:10  颗就完了  阅读(164)  评论(0编辑  收藏  举报