原型对象就是解决构造函数创建对象时的弊端。
每一个构造函数都有一个prototype属性,这个属性指向的就是原型对象
<script>
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var ldh = new Person("liudehua", 26, "man");
console.log(ldh); //Person {name: "liudehua", age: 26, sex: "man"}
//每一个实例对象都有constructor属性,指向产生这个实例的构造函数,这句是错的
// 每一个实例对象都有constructor属性,其实访问的是原型对象上的constructor。
//原型最初只包含constructor属性,而该属性也是共享的,因此可以通过对象实例访问。
console.log(ldh.constructor === Person) //true
// Person.prototype.nike = "chuohoa"
//工厂函数的弊端,构造函数来解决,构造函数的弊端原型对象来解决
//打印原型对象
console.log(Person.prototype);
// 原型对象中有constructor,指向构造函数
console.log(Person === Person.prototype.constructor); //true
// 调用构造函数创建一个新实例后,
// 该实例的内部将包含一个指针(内部属性),
// 指向构造函数的原型对象。
// ECMA-262第5版中管这个指针叫[[Prototype]]。
// 虽然在脚本中没有标准的方式访问[[Prototype]],
// 但Firefox、Safari和Chrome在每个对象上都支持一个属性__proto__
console.log(Person.prototype === ldh.__proto__)
//__proto__,这个连接存在于实例与构造函数的原型对象之间,
// 而不是存在于实例与构造函数之间
// ldh.__proto__指向的是原型对象
console.log(ldh.__proto__.constructor === Person) //true
//ECMAScript 5增加了一个新方法,叫Object.getPrototypeOf(),
//在所有支持的实现中,这个方法返回[[Prototype]]的值
//说人话:也就是指向了原型对象呗,原型对象就是构造函数和实例之间的桥梁。
console.log(Object.getPrototypeOf(ldh) == Person.prototype)//true
</script>
