js原型和原型链小结

原型—对象属性

javascript规定,每个函数都有一个prototype对象属性,其所有的属性和方法,都会被构造函数的实例继承。
(所以我们会将公用的/不变的属性和方法,直接定义在prototype对象属性上)
prototype就是实例对象的原型。

原型链—实例对象与原型之间的连接

javascript在创建对象的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象(prototype)

小结:

对象必然有_proto_属性,但不一定有prototype;实例的对象通过_proto_属性连接到构造函数的prototype属性上。而***原型链就是从这两者的关系开始一层一层往下找的关系(找妈的一种行为方式)***;原型链是针对构造函数的。通过new 创建函数,new出来的函数就会继承创建他的函数的属性。

函数必然有prototype和_proto_两个属性,所有的函数(包括自定义函数)都是Function实例的对象;
__proto__是所有对象(包括函数都有的,基本不会去用,js引擎实现原型链用的);prototype只有函数有;

【对象使用prototype的好处】
1)不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
2)使用prototype属性定义的对象方法,是非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!
参考原文链接:https://blog.youkuaiyun.com/qq_34009923/article/details/78867264

原型链主要用于继承,其实就是为了代码复用。因为js算不上是面向对象的语言,继承是基于原型实现而不是基于类实现的,所以继承的思想提现的不是特别深。

发现了一篇非常好的文章,里面很形象的讲了JS中的面向对象,顺便搞懂prototype和__proto__

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值