原型和原型链

2019-08-23  本文已影响0人  饥人谷_ika0s

_proto_

任何对象在创建时都会具有__proto__属性,它指向构造该对象的构造函数的原型对象

实例化一个String对象 并输出

1.jpg

可以看到str有0、1、length、__proto__四个属性,点开__proto__

str.__proto__上存在着很多方法,所有String实例都可以共享这上面的属性和方法

prototype与constructor

任何构造函数在创建时都会具有prototype属性,指向当前构造函数的原型对象,在默认情况下,所有的原型对象都会自动获得一个constructor属性,该属性指回prototype属性所在的构造函数,

大多数情况下可以把__proto__理解为构造器的原型即Object.__proto__===constructor.prototype

以下是一种特殊情况

原型链

js里一切都可以被当做对象,任何对象都会具有__proto__属性。而js引擎在读取实例对象的属性时,如果存在普通属性中,就直接使用,如果找不到,就会查找与对象关联的原型中的属性,一直找到顶层(Object.prototype)。原型链上的对象靠__proto__属性连在一起形成了一条链,称为原型链。

原型链完整结构图

原型链中Function和Object之间的各种关系比较重要

首先记住对象祖先为Object.prototype,函数祖先为Function.prototype。

1.Object.__proto__ === Function.prototype // true

JS里Function既是构造函数也是对象。作为构造函数来看,任何函数都是Function构造出来的,Object是是函数对象,是Function构造的,所以Object.__proto__===Function.prototype,

2.Function.__proto__ === Function.prototype // true

作为函数对象来看,Function是通过Function函数来创建,也就是自己创建自己

3.Function.prototype.__proto__ === Object.prototype //true

Function.prototype也是对象,继承于Object.prototype

hasOwnProperty

hasOwnProperty()返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。

用法:object.hasOwnProperty(proName) 参数必须是以字符串的形式

上一篇下一篇

猜你喜欢

热点阅读