当前位置:网站首页>08-JS对象、原型及原型链
08-JS对象、原型及原型链
2022-08-11 05:17:00 【CapejasmineY】
一、对象
1、创建对象
字面量方式:
var obj={
name: "liuyan",
}
内置构造函数创建对象:
var obj = new Object()
obj.name='liuyan'
obj.aage=18
工厂函数创建
function createObj(){
var obj = {}
obj.name = 'liu'
obj.han= function(){}
return obj
}
var obj = createObj()
自定义构建函数
function CreateObj(){ #首字母大写规范
#this指向当前实例
this.name = 'Jack'
this.age = 18
this.sayhi=function(){}
}
var obj1 = new createObj()
#函数内部不需要写return
#如果写了,return简单数据类型没有用,return复杂类型数据会覆盖构造的属性
2、自定义构造函数的不合理性:
使用构造函数创建的对象p1和p2:
p1 不等于 p2 ——>两个不同的对象
p1.sayhi 不等于p2.sayhi ——>两个不同的函数
这样会造成创建一次对象,就会有一个一摸一样的函数占用空间
3、解决自定义构造函数不合理问题
原型
每一个构造函数天生自带prototype属性,是一个对象数据类型。
创建的对象自带__proto__属性,指向所属构造函数的protype。在访问对象自己的属性时,如果没有找到,就会去__proto__上查找,从而查询所属构造函数的prototype
将公共方法属性添加到构造函数原型上,其所有对象创建后,通过自己__proto__属性指向的构造对象的prototype原型上去获取,不需要每个对象都创建相同资源。可以使用对象的操作语法向里面添加内容
//构造函数
function Person(){
}
//构造函数原型上添加sayhi函数
Person.prototype.sayhi=function(){}
//创建对象
h1=new Person()
h2=new Person()
//调用对象中的sayhi函数
h1.sayhi
console.log(h1.saihi === h2.sayhi) #true
属性:直接写在构造函数体内
方法:写在构造函数原型上
原型链
对象是Object的实例,所有的原型链都会汇集此处
函数是Function的实例
Object的prototype是顶级原型,proto__值为null
函数访问机制:
1、首先查找自己的对象成员,如果有直接使用
2、如果没有,查询__proto ,也就是自己所属的构造函数的prototype对象
3、如果还是没有,则查询所属构造函数prototype对象的__proto__,也就是Object的prototype对象
4、如果没有找到则返回null
边栏推荐
猜你喜欢
随机推荐
怎么用管理员方式打开压缩包
[转载]Verilog testbench总结
Django--20 implements Redis support, context, and interaction of context and interface
吃瓜教程task01 第2章 模型评估与选择
【win10+cuda7.5+cudnn6.0安装caffe③】编译及测试caffe
C语言——文件操作(2)文件的读写操作
CSDN 社区内容创作规范
Chapter 5 Loops and Relational Expressions
性能效率测试
家·谱——人脸识别家谱系统
task04 Pytorch进阶训练技巧
我的四核Cortex-A53学习之路
(1) Docker installs Redis in practice (one master, two slaves, three sentinels)
【记录】没用知识点 - 智力题
LeetCode43. String multiplication (this method can be used to multiply large numbers)
QT QLabel控件(使用详解)
第13章 类的继承-1
C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)
C语言自定义类型——枚举类型讲解
【C语言从初阶到进阶】第一篇 初始C语言(一)









