当前位置: 首页 > article >正文

Javascript 原型和原型链

8.1 原型的基本概念

  • 原型(prototype

    原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象,可以继承该原型的属性和方法,原型也是对象。

    Person.prototype.lastName = '刘'
    function Person(){}
    
    var person1 = new Person();
    var person2 = new Person();
    console.log(person1.lastName);	// 刘
    console.log(person2.lastName);	// 刘
    

8.2 原型有什么用

  • 原型的作用

    • 给我们构造函数实例化出的对象设置公共的属性或方法使用的
  • 方法写在哪

    • 方法写在原型上
      • 写在构造函数里的方法和属性会重新克隆一次,会导致占用内存较高
    • 需要配置的属性写在构造函数上
    function Person(name) {
        this.name = name; // 每个实例的私有属性
    }
    
    Person.prototype.getName = function() { // 所有实例共享的方法
        return this.name;
    };
    
    var person1 = new Person("Alice");
    var person2 = new Person("Bob");
    
    console.log(person1.getName()); // 输出:Alice
    console.log(person2.getName()); // 输出:Bob
    

8.3 原型链

  • 函数才有 prototype 属性,对象有 __proto__ 或 [[prototype]] 属性

    function Car(){}
    var car = new Car()
    console.log(Car.prototype)		// 函数有prototypr属性
    

    在这里插入图片描述

    console.log(car.prototype)	// undefined,对象没有prototype属性
    
    console.log(car)
    

    在这里插入图片描述

  • 原型链

    • js⾥万物皆对象,所以⼀直访问 _proto_ 属性就会产⽣⼀条链条

    • 链条的尽头是null

      在这里插入图片描述

    • 当js引擎查找对象的属性时,会先判断对象本身是否存在该属性

    • 不存在的属性就会沿着原型链往上找

在这里插入图片描述

  • 什么是原型链?

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

8.4 类型检测

  • typeof

    ⽤于判断基础数据的类型,⽆法区分对象与数组

    var a = 1;
    console.log(typeof a); //number
    
    var b = "1";
    console.log(typeof b); //string
    
    var xd;
    console.log(typeof xd); //undefined
    
    function fun() {}
    console.log(typeof fun); //function
    
    var c = [1, 2, 3];
    console.log(typeof c); //object
    
    var d = { name: "白糖" };
    console.log(typeof d); //object
    
  • instanceof

    ⽤于判断复杂数据的类型,可以区分对象与数组

    instanceof 运算符⽤于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,可以理解为是否为某个对象的实例

    var xd = [];
    var xdclass = {};
    console.log(xd instanceof Array); //true
    console.log(xdclass instanceof Array); //false
    
    var a = [1, 2, 3];
    console.log(c instanceof Array); //true
    
    var b = { name: "baitang" };
    console.log(d instanceof Object); //true
    
    function Fun() {}
    var xd = new Fun();
    console.log(xd instanceof Fun); //true
    

http://www.kler.cn/a/579285.html

相关文章:

  • Oracle数据恢复:闪回查询
  • Swagger-01.介绍和使用方式
  • [傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中
  • 【python爬虫】酷狗音乐爬取练习
  • 基于RNN+微信小程序+Flask的古诗词生成应用
  • postman接口请求中的 Raw是什么
  • C++算法——差分
  • 从 GitHub 批量下载项目各版本的方法
  • 复合机器人:重新定义生产流程的核心引擎
  • Oracle SQL优化实战要点解析(11)——索引、相关子查询及NL操作(1)
  • 基于Spring Boot的城市垃圾分类管理系统的设计与实现(LW+源码+讲解)
  • 深度学习驱动的智能化革命:从技术突破到行业实践
  • Redis篇:基础知识总结与基于长期主义的内容更新
  • 降级选型啊
  • [数据结构算法递归]另一棵树的子树
  • IMX6ULL驱动开发Linux篇02——移植Rootfs
  • 如何在unity中完整录制一段动画
  • Python数据可视化创意分享:探索数据背后的故事
  • 跟踪性能提高11%|端到端新架构DMAD:通过分离语义-运动学习解决负迁移难题
  • C++ 数据结构详解及学习规划