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>
