JavaScript 对象原型

  • JavaScript对象原型

    所有JavaScript对象都从原型继承属性和方法。在上一章中,我们学习了如何使用对象构造函数:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
    }
    
    var myFather = new Person("John", "Doe", 50, "blue");
    var myMother = new Person("Sally", "Rally", 48, "green");
    尝试一下
    我们还了解到,您无法向现有对象构造函数添加新属性:
    Person.nationality = "English";
    尝试一下
    要向构造函数添加新属性,必须将其添加到构造函数:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
      this.nationality = "English";
    }
    尝试一下
  • 原型继承

    所有JavaScript对象都从原型继承属性和方法:
    • Date 对象继承自 Date.prototype
    • Array 对象继承自 Array.prototype
    • Person 对象继承自 Person.prototype
    Object.prototype位于原型继承链的顶部:Date对象,Array对象和Person对象继承自Object.prototype。
  • 向对象添加属性和方法

    有时,您希望向给定类型的所有现有对象添加新属性(或方法)。有时您想要向对象构造函数添加新属性(或方法)。

    使用原型属性

    JavaScript prototype属性允许您向对象构造函数添加新属性:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
    }
    
    Person.prototype.nationality = "English";
    尝试一下
    JavaScript prototype属性还允许您向对象构造函数添加新方法:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
    }
    
    Person.prototype.name = function() {
      return this.firstName + " " + this.lastName;
    };
    尝试一下
    只修改自己的原型。永远不要修改标准JavaScript对象的原型。