关于原型链的理解

38 阅读1分钟

构造函数:     function Person(name, age, job) {         this.name = name;         this.age = age;         this.job = job;         this.sayName = function() {             alert(this.name)         }     }     var person1 = new Person('Zaxlct', 28, 'Software Engineer');     var person2 = new Person('Mick', 23, 'Doctor');

    person1 和 person2 都是 构造函数 Person 的实例。

原型对象,其实就是Person.prototype,在构造函数里,this指向new创建的实例,创建了person1,person2,

它们其实没有constructor属性( 可能person1,person2 有 __proto__属性 ),只是能继承prototype的属性constructor,然后原型对象有个属性

constructor 却指向Person,所以    Person.prototype.constructor == Person 感觉像是循环回来了,这可能就是原型链

对象 person1 有一个 __proto__属性,创建它的构造函数是 Person,构造函数的原型对象是 Person.prototype ,所以:   

person1.proto == Person.prototype

根据图例得知:

Person.prototype.constructor == Person; person1.proto == Person.prototype; person1.constructor == Person;

不过,要明确的真正重要的一点就是,这个连接存在于实例(person1)与构造函数(Person)的原型对象(Person.prototype)之间,而不

是存在于实例(person1)与构造函数(Person)之间。(意思是继承性)

创建一个对象:var obj = {}    ==等同于==》var obj = new Object()

obj 是构造函数(Object)的一个实例。所以: obj.constructor === Object obj.proto === Object.prototype 每个对象都有 proto 属性,但只有函数对象才有 prototype