构造函数和原型

117 阅读2分钟

对象的三种创建方式

字面量

var obj = {}

new 关键字

var obj=new Object()

构造函数

function Person(){
    this.name="zs"
    this.age =12
}
var p = new Person()

构造函数的原型

构造函数通过原型分配的函数是所有对象共享的

JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,这个prototype属性就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有

我们可以把哪些不变的方法,直接定义在prototype对象上,这样所有的对象实例就可以共享这些方法

每一个实例对象都可以访问它构造函数的原型对象中的成员

 /* 
      实例成员 就是构造函数内部 通过this添加的成员uname  age sing
    */

      function Star(uname, age) {
        this.uname = uname
        this.age = age
        // this.sing = function () {
        //   console.log('我会唱歌')
        // }
      }

      // console.log(Star.prototype)

      // 动态的方式给原型对象添加成员

      Star.prototype.sing = function () {
        console.log('我会唱歌')
      }

      // 实例化对象   new创建的对象就是一个实例对象
      var ldh = new Star('刘德华', 18) // 实例成员只能通过实例化的对象来访问
      console.log(ldh.uname)
      console.log(ldh.age)
      ldh.sing()
      var zxy = new Star('张学友', 28)
      zxy.sing()
      // 一般情况下 我们把公共的属性定义到构造函数里面 公共的方法放到原型对象上

对象原型

实例对象都会有一个属性__proto__ 指向构造函数的prototype原型对象 之所以我们对象可以使用构造函数prototype 原型对象的属性和方法,就是因为对象有__proto__属性的存在

proto 对象原型 和原型对象prototype 是等价的 proto 对象原型的意义 在于为对象的查找机制提供了一个方向,或者说是一条路线,__proto__是一个非标准属性

在开发过程中,不可以使用这个属性__proto__,它只是内部指向原型对象prototype

原型链.png