构造函数、原型对象和实例对象你真的都懂吗

80 阅读1分钟

1.构造函数

构造函数是用来创建多个属性名相同但属性值不同的对象。

构造函数特点: 1.函数体内使用this关键字,代表了所要生成的对象实例。 2.生成对象,必须使用new 关键字实例化。

构造函数首字母一般要大写,用来与普通函数区分。

        function createPerson(name, age, sex) {
            this.name = name
            this.age = age
            this.sex = sex
        }
        let p1 = new createPerson('张三', 20, '男')
        let p2 = new createPerson('李四', 30, '男')

2.使用构造函数的利弊

利:创建对象非常简单简洁。

弊:每调用一次就会在堆空间中创建一个新的地址,非常浪费内存

那么怎么解决这个问题呢?

答:原型对象

3.原型对象

任何函数在被创建时浏览器都会创建一个与之对应的对象,这个对象就称之为原型对象。并且实例对象可以随意调用原型对象里的方法,所以我们直接给原型对象添加方法,这样就避免了全局变量污染和内存浪费的问题。

        //1.构造函数
        function Person(name, age) {
            this.name = name
            this.age = age
        }
        //2.原型对象
        console.log(Person.prototype)
        //给原型对象添加方法
        Person.prototype.eat = function () {
            console.log('吃东西')
        }
        Person.prototype.learn = function () {
            console.log('学习')
        }
        //3.实例对象
        let p1 = new Person('张三', 20)
        let p2 = new Person('李四', 25)
        console.log(p1, p2)
        console.log(p1.eat === p2.eat)//true

4.三者之间的关系

prototype: 属于构造函数指向原型对象
作用:内存浪费与全局变量污染问题

proto:属于实例对象指向原型对象
作用:让实例对象随意调用原型对象的方法、成员

constructor:属于原型对象指向构造函数
作用:可以查看自己的构造函数