构造函数

构造函数与普通函数没有任何区别。只是在调用的时候通过 new 关键字来调用,用来生成一个对象

new 操作符

  1. 新建一个对象
  2. 把 this 指向给新建的对象
  3. this.xxx
  4. 把这个对象返回出去

实例:

  1. function person() {
  2. this.name = '小绿';
  3. this.age = '18';
  4. this.hi = function() {
  5. alert('goodbye')
  6. }
  7. }
  8. var obj = new person();
  9. console.log(obj.name)
  10. console.log(obj.age)
  11. obj.hi();

原型对象

prototype 原型对象

函数对象才有的属性,proto 原型 指向构造函数的原型对象,所有的对象都有的属性

  1. 一个对象访问某个属性或者方法时,首先查找自身有没有这个属性或方法,如果有就直接访问,
  2. 如果没有,就去查找原型 __proto__,对象的原型指向 该对象的构造函数的原型对象
  3. prototype ,如果构造函数的原型对象也没有这个属性或方法,去构造函数的原型
  4. __proto__查找,最终查找到 Object()的prototype,这个查找的过程叫原型链

实例:

  1. function animal(duck, color, cool, name) {
  2. this.duck = duck;
  3. this.color = color;
  4. this.cool = cool;
  5. this.name = name;
  6. }
  7. animal.prototype.jiao = function() {
  8. console.log(this.duck);
  9. }
  10. animal.prototype.ys = function() {
  11. console.log(this.color);
  12. }
  13. animal.prototype.tz = function() {
  14. console.log(this.cool);
  15. }
  16. animal.prototype.mz = function() {
  17. console.log(this.name)
  18. }
  19. var animal1 = new animal('嘎嘎嘎', 'green', '酷', '小绿');
  20. var animal2 = new animal('汪汪汪', 'black and white', '傻屌', '二哈');
  21. console.log(animal1, animal2)
  22. animal1.jiao();
  23. animal1.ys();
  24. animal1.tz();
  25. animal1.mz();
  26. animal2.jiao();
  27. animal2.ys();
  28. animal2.tz();
  29. animal2.mz();
  30. console.log(animal2.toString())

注: 创建一个构造函数,通过prototype 传入一个新的方法:
当new 一个新的函数的时候,这个新的函数本身没有这个方法,的时候会通过proto找到原型对象中的这个方法并调用。
语法:

  1. 构造函数名.prototype.方法名 = function() {
  2. 执行语句
  3. }
  4. animal.prototype.mz = function() {
  5. console.log(this.name)
  6. }