2020.11.28 JavaScript高阶 构造函数和原型

构造函数和原型

通过构造函数建立对象:

  function Star(name, age) {
            this.name = 'dengzhu';
            this.age = 19;
            this.sing = function() {
                console.log('我可以唱歌');
            }
        }
        let dz = new Star('邓柱', 19);
        let dj = new Star('邓杰', 19);

实例成员和静态成员


        //## 实例成员只能通过实例化对象访问 如 name age sing
        //## 静态成员只能通过构造函数访问 如  
        Star.sex = '男';
        console.log(Star.sex);

实例成员:构造函数中的属性和方法都是实例成员 只能通过实例化对象访问,不可以通过构造函数来访问

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

构造函数中存在的问题:通过构造函数实例化对象 会 使相同的方法 被多次创建 从而浪费了内存

解决方法构造函数中的原型 Prototype

作用:通过原型分配的函数是共享的
什么是原型:原型对象
原理: 每一个构造函数都有一个原型 原型对象都指向了同一个地址
而每一个实例化对象 都有个一个_proto_ 对象指向 构造函数的原型对象想·

创建实例对象

  //原型对象的创建
        //原型对象创建的方法 只要是 实例对象都可以调用
        Star.prototype.dance = function() {
            console.log('moonfoot');
        }

        dz.dance();

原理:

在这里插入图片描述
当某个实例对象调用某个方法时,先查看该实例对象是否有这个方法 在到原型对象中寻找
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

constructor方法

原型对象中存储着constructor方法 用于指向 原来的构造函数

!!!当修改了原来的原型对象,并且是以对象的形式覆盖了原型对象(当用对象在原型对象中添加多个方法时) 需要手动将constructor方法指向构造函数, 实例对象不能够调用这多个方法

//constructor属性 当原型对象被覆盖时需要指向构造函数
        Star.prototype = {
            constructor: Star,
            fly: function() {
                console.log('我能飞');
            },
            walk: function() {
                console.log('我能走');
            }
        }

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、

原型链(了解)

在这里插入图片描述

构造函数中的this

1.构造函数中的this指向的是 实例对象
2.原型对象中的this 指向的也是实例对象

原型对象的应用:拓展 数组 字符串等的内置对象

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页