prototype 原型对象

·任何函数都具有一个prototype 属性,该属性是一个对象

·可以在原型对象上添加属性和方法。

·构造函数的 prototype对象默认都有一个constructor属性,指向** prototype对象所在**函数

·通过构造函数得到的实例对象内部会包含一个

指向**构造函数的 prototype对象的指针proto**

·实例对象可以直接访问原型对象成员。

解决方法

JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向**构造函数的原型**对象

这个原型对象的所有属性和方法,都会被构造函数的实例对象所拥有。

因此,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。

解决内存浪费问题

构造函数、实例、原型对象三者之间的关系

更好的解决方法 prototype - 图1

<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>