JavaScript之面向对象 --- 理解原型链

首先来理清楚原型链里面的prototype和__proto__这两个要素,下面来一个例子

<script>
    function Person() {
        this.name = "xiaomi";
    }

    let person1 = new Person();
    console.log(person1.name);      // xiaomi

    person1.name = "NewName";
    console.log(person1.name);      // NewName
</script>

上面的例子中,创建了一个构造函数Person,person1调用Person的构造函数创建了一个新的实例。那么person1的内部属性指针( __proto__ )就是指向构造函数Person的原型对象(prototype);如何证实这个指向的正确性呢?我们可以通过isPrototypeOf方法来做一个检测。

console.log(Person.prototype.isPrototypeOf(person1))    // true

如果返回true的话,则两者的指向关系(person1的__proto__指向Person.prototype)成立。

当调用person1的属性name时,首先会在person1对象本身中进行搜索,如果找到了,就返回该属性相应的值;如果没有找到,则根据person1的内部指针属性,往上一级进行搜索,如果还是没找到,还是会继续往上一级进行搜索,一直到该实例对象的最顶端的原型对象,到最后都是没有找到就会返回null。这一个过程,我们称之为原型链。

该文章例子为本人理解js原型链所写,如描述不到位还望指正。

猜你喜欢

转载自blog.csdn.net/joyvonlee/article/details/88832585