CocosCreator 面试题(二)JavaScript中的prototype的理解
1、原型(prototype)的作用
在JavaScript中,每个函数都有一个特殊的属性叫做"prototype",它是一个对象。
原型(prototype)在JavaScript中用于实现对象之间的继承和共享属性。当创建一个函数时,JavaScript会自动为该函数创建一个原型对象,并将其赋值给函数的"prototype"属性。
通过原型对象,我们可以给函数添加属性和方法,这些属性和方法将被该函数的所有实例对象所共享。当我们创建一个函数的实例对象时,该实例对象会继承函数的原型对象上的属性和方法。
举个例子,我们创建一个名为"Person"的构造函数,然后向它的原型对象添加一个属性和一个方法:
// 创建构造函数
function Person(name, age) {this.name = name;this.age = age;
}// 向原型对象添加属性和方法
Person.prototype.gender = 'Male';
Person.prototype.greet = function() {console.log('Hello, my name is ' + this.name + ' and I am ' + this.age + ' years old.');
};// 创建实例对象
var person1 = new Person('John', 25);
var person2 = new Person('Alice', 30);// 访问共享的属性和方法
console.log(person1.gender); // 输出: Male
person2.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
在上面的例子中,通过给"Person.prototype"添加属性"gender"和方法"greet",所有通过"Person"构造函数创建的实例对象都可以访问这些共享的属性和方法。
这样的原型链继承机制可以实现属性和方法的共享,避免在每个实例对象中重复定义相同的属性和方法,从而节省内存并提高代码的效率。
2、函数有prototype属性,函数创建的对象没有prototype属性
// 创建构造函数
function Person(name, age) {this.name = name;this.age = age;
}// 向原型对象添加属性和方法
Person.prototype.gender = 'Male';// 创建实例对象
var person1 = new Person('John', 25);console.log(person1.prototype.gender); //Uncaught TypeError: Cannot set properties of undefined (setting 'gender')
3、如何查看一个对象到底有没有prototype这个属性?
console.log("prototype" in person1) //false
4、如何查看一个变量是对象自己扩展的?
hasOwnProperty
// 创建构造函数
function Person(name, age) {this.name = name;this.age = age;
}// 向原型对象添加属性和方法
Person.prototype.gender = 'Male';// 创建实例对象
var person1 = new Person('John', 25);
person1.var1 = "person1自己的变量"console.log(person1.hasOwnProperty("var1")) //true
console.log(person1.hasOwnProperty("gender")) //false
5、对象__proto__
和prototype
有什么区别?
- 对象
__proto__
属性和函数的protype属性是一样的。 - 对象并没有prototype属性
__proto__
其实双下划线表示隐藏,不让外界访问到。
函数Person不仅创建了person1,还会创建了person2,这时候如果子person1通过__proto__
修改了var1,那么父Person 的var1跟着变化,并且person2的var1也会变化。
但是如果person1直接修改var1,那么Person和person2的var1都不会变化。
// 创建构造函数
function Person(name, age) {this.name = name;this.age = age;
}// 向原型对象添加属性和方法
Person.prototype.gender = 'Male';// 创建实例对象
var person1 = new Person('John', 25);person1.var1 = "person1自己的变量"console.log(person1.__proto__ === Person.prototype) // true
console.log(person1.__proto__ == Person.prototype) // true
console.log(person1.prototype == Person.prototype) // false
console.log(person1.__proto__.var1) //Person 进行了扩展
console.log(person1.var1) //person1 进行了扩展
6、函数对象用两次__proto__
即可找到Object 对象原型 _prototype
属性
var obj1 = new Object()
console.log(obj1.__proto__ == Object.prototype) // truevar obj2 = Object()
console.log(obj2.__proto__ == Object.prototype) // truefunction Person(name, age) {this.name = name;this.age = age;
}console.log(Person.prototype.__proto__ == Object.prototype) // true
var person1 = new Person()
console.log(person1.__proto__ == Person.prototype)
console.log(person1.__proto__.__proto__ == obj1.__proto__) // true
相关文章:

CocosCreator 面试题(二)JavaScript中的prototype的理解
1、原型(prototype)的作用 在JavaScript中,每个函数都有一个特殊的属性叫做"prototype",它是一个对象。 原型(prototype)在JavaScript中用于实现对象之间的继承和共享属性。当创建一个函数时&am…...

python:从Excel或者CSV中读取因变量与多个自变量,用于训练机器学习回归模型,并输出预测结果
作者:CSDN @ _养乐多_ 本文详细记录了从Excel读取用于训练机器学习模型的数据,包括独立变量和因变量数据,以供用于机器学习模型的训练。这些机器学习模型包括但不限于随机森林回归模型(RF)和支持向量机回归模型(SVM)。随后,我们将测试数据集应用于这些模型,进行预测和…...

pycharm连接gitlab
1、下载安装gitlab 下载地址:Git - Downloading Package 下载后傻瓜式安装,注意勾选配置环境变量 未配置自己配置,电脑-属性-高级系统配置-环境变量 系统变量path:添加git安装目录下bin目录 2、检验安装完成 桌面右键git-open…...

【C/C++数据结构 - 2】:稳定性与优化揭秘,揭开插入排序、希尔排序和快速排序的神秘面纱!
文章目录 排序的稳定性插入排序插入排序的优化 希尔排序快速排序 排序的稳定性 稳定排序:排序前2个相等的数在序列中的前后位置顺序和排序后它们2个的前后位置顺序相同。(比如:冒泡、插入、基数、归并) 非稳定排序:排…...

PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五)
PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 继续SIFT关键点的提取介绍,之前已经基于高程和颜色分别提取了关键点,这里是基于强度信息,若遇到文件无法读取强度问题,请参考上一篇博文,下面是具体的实现…...

uniapp打包配置
安卓: 首先不管是什么打包都需要证书,安卓的证书一般都是公司提供或者自己去申请。然后把包名等下图框住的信息填上,点击打包即可。 ios:ios需要使用mac到苹果开发者平台去申请证书,流程可以参考下边的链接 参考链接…...

人大金仓分析型数据库最大量限制
数据库支持的最大量限制: 维度 限制 数据库大小 无限 表大小 无限 行大小 1.6 TB 域大小 1 GB 每个表的行数 281474976710656 (2^48) 每个表 / 视图的列数 1600 每个表的索引数 无限 每个索引的列数 32 每个表的表级约束 无限 表名长度 63 字节 列出的“无限”…...

centos 里面的service自启动app.jar,出现两个java进程,app是同一个端口
当使用jps -lv查看java虚拟机进程 app.jar启动后,居然出现两个启动进程,而且他们的端口都一样,同一端口,是不允许启动两个相同app的。 使用进程ps查看进程工具 #ps -aux 参数说明: a: 显示跟当前终端关联的所有进…...

【算法|双指针系列No.7】leetcodeLCR 007. 三数之和
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...

ubuntu修改IP地址
参考:ubuntu修改配置IP地址和DNS的方法总结(4种)_ubuntu设置ip地址-CSDN博客 面对ubuntu18以上的版本,主要有两种界面:图形化界面和纯命令行界面。 图形化界面配置比较简单,命令行配置稍许复杂,…...

java springboot 通过ConfigurationProperties给第三方bean注入属性
之前我们的文章 java boot将一组yml配置信息装配在一个对象中 讲过了 通过ConfigurationProperties将配置文件中的内容默认装配进属性类 但 这建立在 bean是自己定义的 如果 这是个第三方的类呢? 就比如 我们在 application 中写了一套数据源的加载规则 但需要用第…...

windows系统安装openssl并且转换证书格式
概述 碎碎念,如果你有MAC电脑,就别折腾了,直接用MAC电脑吧,不用安装直接用openssl 本文主要讲到了openssl的基本使用方法,开发环境为windows,开发工具为VS2019.本文主要是说明openssl如何使用,不介绍任何理…...

【GO】基础速成
简单介绍一下go好处 编译语言,可以提前报错同时又有python的一些优点,自带多线程 开始学习 学习网站:学习网站 值 包含:字符串、整型、浮点型、布尔型等等 字符串可以 进行拼接。 需要注意的是布尔型在go里面不自动转化为in…...

五子棋(C语言实现)
目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版: game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了,大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…...

thymeleaf,bootstrap-fileinput 多文件上传
组件遍历上传 一、前端 <!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org" > <head><th:block th:include"include :: header(修改固定资产信息)" /><th:block th:include"include :: date…...

爬虫 | 基础模块了解
文章目录 📚http协议📚requests模块📚re模块🐇 re.I 或 re.IGNORECASE🐇re.M或 re.MULTILINE🐇re.S 或 re.DOTALL🐇 re.A 或 re.ASCII🐇 re.X 或 re.VERBOSE🐇特殊字符类…...

CSS复习笔记
CSS 文章目录 CSS1.概念2.CSS 引入方式3.选择器基础选择器:标签选择器类选择器id 选择器通配符选择器 复合选择器:**后代选择器****子代选择器****并集选择器****交集选择器-了解****伪类选择器** 结构伪类选择器:**:nth-child(公式)**伪元素…...

编译linux的设备树
使用make dtbs命令时 在arch/arm 的目录Makefile文件中有 boot : arch/arm/boot prepare 和scripts是空的 在文件scripts/Kbuild.include中 变量build : -f $(srctree)/scripts/Makefile.build obj build变量虽然没有在arch/arm 的目录Makefile文件中定义,但…...

⛳ MyBatis 中 Mapper 接口工作原理实例解析
🎍目录 ⛳ MyBatis 中 Mapper 接口工作原理实例解析🎨 一、Mapper 接口是怎么找到实现类的?🐾 二、从一段代码看起🚜 三、Mapper 接口🏭 四、Mapper 接口的动态代理类的生成🎁 五、总结 ⛳ MyBa…...

Android 音频可视化
Android音频可视化,指的是将音频的频率绘制到屏幕上,达到一种视觉效果,使播放或录制过程更加生动形象。 在Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。 Android原生的Visualizer使用(获取频…...

刷机与救砖避坑指南
提示:快速进行刷机和救砖学习理解 文章目录 一、刷机1.什么是刷机,需要进行那些准备?2.刷机1.解开bl(bootloader)锁2.刷入TWRP和Magsik3.刷入第三方ROM 二、救砖(9008)1.手机售后一键线刷包&…...

软件建模知识点
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…...

WSL 配置 Linux
WSL 配置 Linux Windows 启动 Linux 子系统 控制面板 -> 程序和功能, 将 适用于 Linux 的 Windows 子系统 勾选。 安装 Terminal 在 Microsoft Store 市场上搜索 Terminal 安装 Windows Terminal。 安装 编译工具链 sudo apt update # 更新软件包 sudo apt i…...

VS Code:CMake配置
概述 在VSCode和编译器MinGW安装完毕后,要更高效率的进行C/C开发,采用CMake。CMake是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译,安装的过程,输出Makefile或者project文件,再去…...

Flex 词法分析实验实现(电子科技大学编译技术Icoding实验)
Flex 词法分析 此为电子科技大学编译技术 实验1:词法分析 将具体实现中的三个文件和自己的实验报告一起上传才能通过 根据词法分析实验中给定的文法,利用 flex 设计一词法分析器,该分析器从标准输入读入源代码后,输出单词的类别编…...

设计模式——20. 解释器模式
1. 说明 解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一门语言的语法解析,并为该语言创建解释器。该模式将一个问题或领域表达成一个语言,然后提供一个解释器来解释这种语言中的表达式,以执行特定操作。 要点和组成部分: 抽象表达式(Abstract Ex…...

多输入多输出 | MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测
MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测 目录 MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 C…...

一文让你玩转Linux多进程开发
Linux多进程开发 主要介绍多进程开发时的要点 进程状态转换 进程反应了进程执行的变化。 进程的状态分为三种 ,运行态,阻塞态,就绪态 在五态模型中分为以下几种,新建态,就绪态,运行态,阻塞态,终止态。 运行态:进程占用处理器正在运…...

Linux线程同步实例
线程同步实例 1. 生产消费者模型基本概念2. 基于BlockingQueue的生产者消费者模型3. 基于环形队列的生产消费模型4. 线程池 1. 生产消费者模型基本概念 生产者消费者模型是一种常用的并发设计模式,它可以解决生产者和消费者之间的速度不匹配、解耦、异步等问题。生…...

LuatOS-SOC接口文档(air780E)-- iconv - iconv操作
iconv.open(tocode, fromcode)# 打开相应字符编码转换函数 参数 传入值类型 解释 string 释义:目标编码格式 取值:gb2312/ucs2/ucs2be/utf8 string 释义:源编码格式 取值:gb2312/ucs2/ucs2be/utf8 返回值 返回值类型 解…...