JavaScript - 原型详细讲解

原型简单说就是prototype

prototype就是调用构造函数所创建的那个实例对象的原型
当产生一个function对象的时候,就有一个原型prototype,prototype的属性值是一个对象,是属性的集合,这个属性是一个指针,指向一个对象

原型链就是根据函数实例化出来的对象与原型之间的一个链接

如果有人问原型链与原型属性有什么不同:

对象的原型链和实例化该对象的类的原型相同、是同一个对象

不同:对象才有原型链
类才有原型
针对的目标是不一样的

对于是同一个对象、可以运行下面代码、比较一下

function box(){
            function box(){
					//这是之前ES5中的写法
            }
        }

        var b = new box()

        console.log(b.__proto__)
        console.log(box.prototype)

此时的两个打印值是相等的

1、对象的原型链上有一个constructor属性是可以判断该对象是什么类型
2、我们可以根据这个属性constructor实例化出一个新对象

每一个函数都有一个原型属性prototype(对象属性),里面放置的是共有、公有的属性或者方法。(一般情况属性是私有的)。注意,只有函数才有prototyoe属性

prototype是函数的一个属性 这个属性叫做原型属性

1、通过实例化出的对象只能读取原型中的属性name的值,而不能修改原型中的属性name的值。 b.name = “胡歌”; 并不是修改了原型中的值,而是在实例化对象中给添加了一个属性name。

2、寻找一个实例化对象的属性、假如在对象属性中找到了、我们就返回这个属性、如果没找到、就会在原型链一层一层乡向下找、直到这个链表结束

举个例子、这里使用之前比较懒得一种写法、不推荐、因为它不符合面向对象、只是举例使用

var obj = {
            a:1,
            b:2,
            c:function(){
                return this.a + this.b    
            }
        }
    
        var obj1 = Object.create(obj)   
        console.log(obj1,obj1.c())    //原型链上应该是这种情况

在这里插入图片描述
当我给他添加属性时

obj1.a = 5
        console.log(obj1.c())

再打印
在这里插入图片描述
执行obj1.c打印出来就变成了7

也就是说:当我给他添加属性后、调用c的方法、它先在对象属性中找、找到就是用对象属性、找不到就向原型链中寻找

以上就是全部内容

对于前端
我远没有达到精通、只是一直在路上

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值