原型中构造函数存在的问题

55 阅读1分钟

原型中构造函数存在的问题

function Person(name.age,sex){
    this.name = name
    this.age = age
    this.sex = sex
    this.sub = function(){
        console.log("1111")
    }
}

let p = new Person("张三","10","男")
new Person("李四","16","男")
new Person("王武","20","男")

p.sub()    // 1111

  1. 每创建一个对象都会形成一个新的函数,这样会导致资源的浪费
  2. 解决的方法是让所有实例对象可以调用,节省了空间
  3. 让构造函数通过原型分配函数,让所有实例对象共享
  4. JavaScript规定每一个构造函数必须有prototype属性
  5. 指向另一个对象(这个prototype就是一个对象)
  6. 这个对象的所有属性和方法都会被构造函数所拥有
  7. 我们可以把不变的方法,直接定义在构造函数的 .prototype
  8. 在这个对象中的所有实例对象都可以使用原型的方法
  9. 又因为每个实例对象都有__proto__属性,他们都指向构造函数的原型prototype
  10. 所有每个实例对象都可以访问原型中的属性和方法

image.png

function Person(name.age,sex){
    this.name = name
    this.age = age
    this.sex = sex
}

Person.prototype.sub = function(){
    console.log("2222")
}

let p = new Person("张三","10","男")
new Person("李四","16","男")
new Person("王武","20","男")

p.sub()    // 2222

consloe.log(p.__proto__ === Person.prototype) // true
// __proto__ 是一个非标准属性
// __proto__ 和 prototype 是等价的
// __proto__ 的对象原型是为对象提供查找了一个机制也可以说是一条路线 
// 在项目开发过程中不可以使用__proto__ 它只是用来指向prototype