关于类,实例,new,原型的理解

  类和实例是大多数面向对象编程语言的基本概念,js通过原型(prototype)来实现面向对象编程,

  类指具有相同属性和方法的泛指的一群对象(人类),实例指具有特性的单个个体(小明)

  通过new(语法糖)类得到实例,实例的原型就是类,实例一定具有类的属性和方法,但类不具有实例特有的属性和方法。

  之所以使用原型的概念,因为这样可以让多个实例相同的属性方法都指向同一个地址,可以节省内存

  ES5通过函数(构造函数)创建类,通过prototype给类添加属性和方法,再new构造函数来创建实例,

  ES6直接通过class创建类,在constructor() 里写自身特有的方法属性,在外面写公有方法属性,

  私有公有指的是其继承类能否拥有其属性方法,私有公有的属性方法都可以被实例化的对象拥有

关于new的定义:
• 创建一个空对象,将它的引用赋给 this,继承函数的原型。
• 通过 this 将属性和方法添加至这个对象
• 最后返回 this 指向的新对象,也就是实例(如果没有手动返回其他的对象)

  Pep = function (name) {
    this.name = name
  }
  Pep.prototype.bb = function (msg) {
    console.log(this.name + ' bb:' + msg)
  }
  var ming = new Pep('xiao ming')
  ming.bb('I can')// xiao ming bb:I can
  class Animal {  //class定义类
    //构造方法内定义自己私有的属性方法
    constructor() {
      this.type = 'animal'
    }
    //方法外定义公有的属性方法
    says(say) {
      setTimeout(() => {//箭头函数没有自己的this,是继承外面的            
        console.log(this.type + ' says ' + say)
      }, 1000)
    }
  }
  var animal = new Animal() //创建实例对象
  animal.says('hi')  //animal says hi 实例对象继承其原型对象的属性方法

猜你喜欢

转载自blog.csdn.net/qq_41111677/article/details/110238034