美文网首页
原型和原型链

原型和原型链

作者: 饥人谷_ika0s | 来源:发表于2019-08-23 16:25 被阅读0次

    _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) 参数必须是以字符串的形式

    相关文章

      网友评论

          本文标题:原型和原型链

          本文链接:https://www.haomeiwen.com/subject/ayetectx.html