美文网首页
原型与原型链

原型与原型链

作者: redoboy | 来源:发表于2020-11-23 10:40 被阅读0次

    1.基本所有的函数都有原型[prototype],除了Function.prototype.bind()之外.

    let func1 = Function.prototype.bind()
    

    如果用上述方法创建一个函数fun,这个函数fun是不包含属性prototype的
    2.每个对象都有[[prototype]]属性,该属性指向其构造函数的原型。


    原理图.png

    注:[[prototype]]是对象内部的属性,无法外部访问,图中的__proto__其实就是指代[[prototype]],在某些浏览器可以使用该属性__proto__访问到内部属性[[prototype]],下文说的[[prototype]]都是对应的图中的__proto__
    如图所示。f1拥有属性[[prototype]],Foo是f1的构造函数。图中所示,f1的[[prototype]]属性指向的是Foo的原型。也就是Foo.prototype。而Foo.prototype就是构造函数本身。再往深一层,Foo.prototype本身也是个函数。那么他的[[prototype]]属性指向什么呢?图中可以看到,他的[[prototype]]属性指向的是Object.prototype。也就是Object的原型。一次类推,Object的[[prototype]]指向null.原型链就到头了。这里可以看出来,函数和对象通过[[prototype]]是会产生一种链式关系,我们称之为原型链,有了原型链,那么顶层的函数或对象就可以访问到底层的对象或方法。类似于java里面的继承。

    相关文章

      网友评论

          本文标题:原型与原型链

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