原型链 - 图1

<script> // 自定义构造函数 function Person(name,age) { this.name = name; this.age = age; // this.sayName = function () { // console.log(“hello”); // } } // 将所有实例共享的属性和方法,都添加给原型对象 Person.prototype.type = “human”; // Person.prototype.sayName = function () { // console.log(this.name); // }; // 生成对象实例 var person1 = new Person(“Bob”,18); var person2 = new Person(“Mike”,20); // 方法的调用查找 // person1.sayName(); console.log(person1.valueOf()); // console.log(person1); // var o = person1.proto; //指向的是 Person 构造函数的原型对象 // // 任何一个对象都有 proto 属性,指向的就是该对象的 构造函数的 原型对象 // var o2 = o.proto; // console.log(o2.constructor); // console.dir(o2); // console.dir(o2.proto); </script>

原型链查找机制

每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性:

1.搜索首先从对象实例本身开始

2.如果在实例中找到了具有给定名字的属性,则返回该属性的值

3.如果没有找到,则继续搜索指针指向的原型对象

在原型对象中查找具有给定名字的属性

  1. 如果在原型对象中找到了这个属性,则返回该属性的值