new-构造函数-原型-类

简介: 虽然现在已经是21年7月,但是es6还是没有那么的普及,所有简单梳理下 一些常用的知识点

1.前言


虽然现在已经是21年7月,但是es6还是没有那么的普及,所有简单梳理下 一些常用的知识点


2. new


基础构造函数结构


function Person(name, age) {
            //    this是谁
            console.log(this);
            this.name = name;
            this.age = age;
            // return this;
        }


构造函数调用 应该叫创建实例了


Person(); //window

window.Person() Person()当普通函数调用 里面的this就是window

new 关键字的作用

1.创建了一个对象

  1. 修改this 指向

把构造函数this的指向修改为指向当前创建的对象

3.把这个新对象 return出去

  1. 执行构造函数的代码


3. 构造函数 原型


还是上文的 构造函数

3.1 原型

每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象,使用原型对象的好处是所有对象实例共享它所包含的属性和方法

3.2 原型链

  1. 原型链的出现 主要是解决继承问题

2.每个对象拥有一个原型对象,通过proto指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向null(Object.proptotype.__proto__指向的是null)。这种关系被称为原型链(prototype chain),通过原型链一个对象可以拥有定义在其他对象中的属性和方法

  1. 构造函数Parent、Parent.prototype和 实例 p的关系如下:(p.__proto__ === Parent.prototype)


var person1 = new Person("杜甫", 18); 
        console.log("person1",person1) //{name:"杜甫,age:18}
// 原型是被所有实例共享的 测试在添加个属性  person1 也能打印出来
        console.log(person1, person1.__proto__, Person.prototype);
        //    对象比较 比的是地址 同一个对象
        console.log(person1.__proto__ === Person.prototype);

person1.__proto__: 通过实例对象 查看原型

Person.prototype:通过构造函数名  查看原型

3.3 prototype 和 proto 区别是什么?

1.prototype是构造函数的属性

2.__proto__是每个实例都有的属性,可以访问prototype属性

3.实例的__proto__与其构造函数的prototype指向的是同一个对象


4. 原型


JavaScript的原型是为了实现对象间的联系,解决构造函数无法数据共享而引入的一个属性,而原型链是一个实现对象间联系即继承的主要方法


Person.prototype.sex = "男";
 //     原型上的属性 sex和实例上的 属性 name有什么区别
        // 和实例上的属性 name 有什么区别
        console.log(person1.name, person1.sex);
        var person2 = new Person("李白", 28);
        console.log(person2.name, person2.sex);

.属性先看自己有没有 没有往上层原型上找 都没有未定义


5. 顶层原型



// 最顶层原型Object
        // 给最顶层原型链添加 
        Object.prototype.hobby = "写代码";
        console.log(person1.hobby);
//只要在js里面都有这个属性
        console.log(document.hobby);
        console.log(document.body.hobby);
        var a = [],
            b = 10,
            c = "abc";
        console.log(a.hobby, b.hobby, c.hobby);



6. vue里面 旧版的用法



vue.prototype.baseUrl  = "http://" // this.baseUrl
  vue.prototype.$http  = axios    //this.$http.get().then().catch()



7. 类


查看数组的原型

实例上   放属性

原型上   放函数

点类


class Point {
            // 构造函数:类的一部分
            // 通过类实例化一个对象被执行的函数就是构造函数
            constructor(x, y) {
                console.log("我被创建了...", x, y);
                this.x = x;
                this.y = y;
            }
            // 自定义函数 自动保存到原型上 对象上没有 原型上有了
            // 相当于 Peron.prototype.sayHi  = function
            sayHi() {
                // this:谁调用,就是谁
                console.log(`我的位置:x=${this.x}`);
            }
        }


点类的实例


var point1 = new Point(10, 20);
        console.log(point1);
        //   但是没有输出  加上参数 
        point1.sayHi();
        var point2 = new Point(100, 200);
        point2.sayHi();



8.继承



class ColorPoint extends Point {
            // 子类的构造函数会覆盖父类的构造函数,必须手动调用父类构造函数  
             // 不走父类的构造函数  没创建父类 ,就没有了父类的属性和方法
            constructor(x, y, color) {
                super(x, y); // 调用父类构造函数  super父类的意思
                // 自己只保存自己新增的属性
                this.color = color;
                // this.x = x;
                // this.y = y;//可以,但是没必要,我们继承 调父类就是为了省事
                console.log("colorPoint 构造函数");
            }
        }


彩色点的 实例


// 先走自己的构造函数 在走父类
        var color1 = new ColorPoint(11, 22, "red");
        console.log(color1);
        color1.sayHi();




相关文章
|
2天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1078 0
|
11天前
|
人工智能 运维 安全
|
10天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
2天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
265 0
|
9天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
758 23
|
2天前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
2天前
|
缓存 监控 API
Amazon item_review 商品评论接口深度分析及 Python 实现
亚马逊商品评论接口(item_review)可获取用户评分、评论内容及时间等数据,支持多维度筛选与分页调用,结合Python实现情感分析、关键词提取与可视化,助力竞品分析、产品优化与市场决策。