prototype 原型对象
·任何函数都具有一个prototype 属性,该属性是一个对象。
·可以在原型对象上添加属性和方法。
·构造函数的 prototype对象默认都有一个constructor属性,指向** prototype对象所在**函数。
·通过构造函数得到的实例对象内部会包含一个
指向**构造函数的 prototype对象的指针proto**
·实例对象可以直接访问原型对象成员。
解决方法
JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向**构造函数的原型**对象。
这个原型对象的所有属性和方法,都会被构造函数的实例对象所拥有。
因此,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。
解决内存浪费问题
构造函数、实例、原型对象三者之间的关系

<script>
// var fns = {
// sayName : function () {
// console.log(this.name);
// },
// sayAge : function () {
// console.log(this.age);
// }
// };
// 自定义构造函数
function Person(name,age) {
this.name = name;
this.age = age;
}
// 更优的解决方法,将所有实例共享的属性和方法,都添加给原型对象
Person.prototype.type = “human”;
Person.prototype.sayName = function () {
// 方法调用时,哪个对象调用,this 指向的就是谁
console.log(this.name);
};
Person.prototype.sayAge = function () {
// 方法调用时,哪个对象调用,this 指向的就是谁
console.log(this.age);
}
// 生成对象实例
var person1 = new Person(“Bob”,18);
var person2 = new Person(“Mike”,20);
// 调用原型对象上公用的属性和方法
person2.sayAge();
console.log(person1.sayAge === person2.sayAge);
</script>