08-JS对象、原型及原型链

一、对象

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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值