美文网首页
原型与原型链

原型与原型链

作者: 遠_ | 来源:发表于2018-05-19 17:55 被阅读0次

    JavaScript仍然大量地使用了对象,为了保证对象之间的联系,JavaScript引入了原型与原型链的概念。

        this.name = name
        this.color = color
        this.bark = () => {
            console.log('wangwang~')
        }
    }
    
    const dog1 = new Dog('dog1', 'black')
    const dog2 = new Dog('dog2', 'white')
    

    所有对象都有 toString 和 valueOf 属性,那么我们是否有必要给每个对象一个 toString 和 valueOf 呢?
    明显不需要。
    JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)
    然后让每一个对象的 __ proto __ 存储这个「公用属性组成的对象」的地址。


    原型

    • 每一个构造函数都拥有一个prototype属性,这个属性指向一个对象,也就是原型对象。当使用这个构造函数创建实例的时候,prototype属性指向的原型对象就成为实例的原型对象。
    • 每个对象都拥有一个隐藏的属性[[prototype]],指向它的原型对象,这个属性可以通过 Object.getPrototypeOf(obj)obj.__ proto __ 来访问。
    • 访问对象的属性时,JavaScript会首先在对象自身的属性内查找,若没有找到,则会跳转到该对象的原型对象中查找。

    原型链
    JavaScript中所有的对象都是由它的原型对象继承而来。而原型对象自身也是一个对象,它也有自己的原型对象,这样层层上溯,就形成了一个类似链表的结构,这就是原型链。


    一个重要的公式

    var 对象 = new 函数()
    对象.proto === 函数.prototype

    函数prototype._ _proto_ _ === object.prototype
    函数._ _proto_ _ === function.prototype
    function._ _proto_ _ === function.prototype
    function.prototype._ _proto_ _ === object.prototype
    

    参考博客

    相关文章

      网友评论

          本文标题:原型与原型链

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