![3c9d0961c0eead463cba6ce85b6107b4.png](https://img-blog.csdnimg.cn/img_convert/3c9d0961c0eead463cba6ce85b6107b4.png)
JavaScript中的原型!原型的内容是涉及到JavaScript中的构造函数的每一个构造函数都有一个原型对象!prototype他的作用是 共享方法!每一个实例化的对象都有一个对象原型__proto__他指向的是构造函数的原型对象所以我们创建的实例对象可以使用对象原型中的方法!__proto__对象原型和原型对象prototype是等价的__proto__对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
看不见我, 看不见我,看不见我!构造函数!对象原型(proto)和原型对象(prototype)里面都有一个constructor属性!, constructor我们称之为构造函数, 因为它指回构造函数本身!constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数
<script> // 构造函数的问题! function Gouzaohanshu(name, age, gender) { this.name = name; this.age = age; this.gender = gender; // this.hanshu = function() { // console.log(123) // } } // 把构造函数放到我们的原型对象身上! // Gouzaohanshu.prototype.hanshu = function () { // console.log(123) // } //很多情况下,我们需要手动的利用 constructor这个属性指固原来的构造函数 // Gouzaohanshu.prototype.sleep = function() { // console.log("我想睡觉!") // } // 如果对象比较多, 那么我们就可以采取对象的形式存储! // 但是如果你这样做的话会把原先的原型对象给覆盖了! // 原先的原型对象就不会指向上面的构造函数了! // 解决方法 // 在下面的对象中添加这样一句代码! // construtor: Gouzaohanshu, // 就可以让构造函数指回他的本身了! // 一句话, 如果我们修改了原来的原型对象, 给原型对象赋值是一个对象, 则必须手动的利用constructor 指回原来的构造函数! Gouzaohanshu.prototype = { construtor: Gouzaohanshu, hanshu() { console.log(123) }, sleep: function() { console.log("我想睡觉!") } } var gz = new Gouzaohanshu('lvhang', 23, 'nan'); // 在我们创建的对象身上也有一个对象叫做! // __prototype__ 叫做对象的原型! // 它指向我们构造函数的原型对象! var gz2 = new Gouzaohanshu('lvhang', 23, 'nan'); gz.hanshu() // __proto__对象的原型和原型对象prototype是等价的 console.log(gz.__proto__ === Gouzaohanshu.prototype); // true // 方法的查找规则:首先先看gz对象身上是否有hanshu方法,如果有就执行这个对象上的hanhsu方法 // 如果没有这个方法,因为有__proto__,就去构造函数原型对 Prototype身上去查找 // constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数 console.log(gz.__proto__); console.log(Gouzaohanshu.prototype); </script>
![91054d85395c84af469ba14e250c0e66.png](https://img-blog.csdnimg.cn/img_convert/91054d85395c84af469ba14e250c0e66.png)