构造函数: 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