js 原型链的理解

1 定义一个方法   方法只有被New 的时候才能成为是构造函数  否则不能确定 该方法是否是构造函数

function test() {
  console.log('eeeee')
}
console.log(test)

 

 

 构造函数都有一个属性prototype,这个属性是一个对象(Object的实例)

function test() {
  console.log('eeeee')
}

let Test = new test()
console.log(Test)

打印 test 的实例对象 Test 看到如下结果     constructior 很容易看出来它是(也是一指针)指向的是构造函数 test   那么 问题来了 _proto_是什么   ?? 接着往下看

 

 

 

每个persion共有的属性就是他的性别都是男,所以我们可以将此属性添加到实例的原型对象中去(也就是Man这个构造函数里面的prototype这个对象)。这样每个实例都可以共享这个属性。

他的实例对象可以共享这个属性,那我们怎么将实例对象和原型对象关联起来呢?在js中,任何对象都有一个属性叫__proto__([[prototype]]),它也是一个指针,指向构造函数的原型对象,就是我们所能共享信息的那个对象。现在我们可以画出一幅图,展示他们之间的关系。

每一个实例对象 (Persion1  Persion2 ) 中都有一个_proto_    这个也是一个指针 指向的是 该实例对象的构造函数所在内存的地址, 等于 这个实例对象的原型对象 等于 Man构造函数的Prototype(指针)对象  所指向的地址  

指向的都是同一块的内存地址

function Man() {}
Man.prototype.sex = '男'
let Person1 = new Man()
let Person2 = new Man()

console.log(Man, Person1, Person2)

 

大概的流程图  如下

 

总结 

1、原型链

    1)构造函数、原型和实例的关系

        ①构造函数都有一个属性prototype,这个属性是一个对象(Object的实例)

        ②原型对象prototype里面有一个constructor属性,该属性指向原型对象所属的构造函数

        ③实例对象都有一个_proto_属性,该属性也指向构造函数的原型对象,它是一个非标准属性,不可以用于编程,它是用于浏览器自己使用的

    2)prototype与_proto_的关系

 

        ①prototype是构造函数的属性

        ②_proto_是实例对象的属性

                    ——这两者都指向同一个对象

    【总结】i)函数也是对象,对象不一定是函数;

            ii)对象的本质:无序的键值对集合;键值对当中的值可以是任意数据类型的值

            iii)对象就是一个容器,这个容器当中放的是(属性和方法)

    3)属性搜索

      ①在访问对象的某个成员的时候会先在对象中找是否存在

      ②如果当前对象中没有就在构造函数的原型对象中找

      ③如果原型对象中没有找到就到原型对象的原型上找

      ④知道Object的原型对象的原型是null为止

2、Function

——所有函数都是Function的实例

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值