JavaScript 面向对象(七)原型链深入

本文深入探讨JavaScript中的原型链,包括__proto__属性、constructor属性、instanceof运算符和继承机制。讲解如何理解对象的原型链,以及在不同场景下的应用和注意事项。同时,讨论了属性归属的判断方法,如hasOwnProperty()。最后提到了JavaScript继承的实现和Resig的解决方案。
摘要由CSDN通过智能技术生成

7.1 __proto__属性

W3C是没有规定一个元素的原型链有一个可见的属性,Chrome浏览器特有 __proto__属性。实际上,其他浏览器有原型链的机制,但是我们看不见这个属性只不过,Chrome浏览器为了我们初学者学习方便,增加了这个属性:


但是在Chrome中,__proto__属性是可以自由更改的,而这根本不是语言的规范,其他浏览器没有实现,也就是说,__proto__属性在其他浏览器中,在语言规范中根本就是看不见的,就没有这个属性


原型链的获得有两种情况:

1)引用类型值的对象它们的字面量的__proto__就是他们类型的构造函数的prototype。


2)通过new关键字,此时构造函数的prototype就是实例的__proto__。


实际上,在语言规范中,一旦原型链产生,将不能更改!只不过Chrome浏览器做的高级了一些,让我们自由更改__proto__而已。


ECMAScript2016中,提供了Object.create()函数,可以让我们指定一个对象为原型对象,来创建新对象。





这个Object.create 兼容性很差,我们能不能自己写一个函数create,它接受一个对象参数,返回以这个对象为原型对象的新对象。我们可以用一个临时的构造函数来中转:



显而易见的是,任何一个对象都有原型对象,原型链的终点就是Object.prototype


</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值