JavaScript 对象构造函数

  • JavaScript对象构造函数

    前几章的例子有限。它们只创建单个对象。有时我们需要一个“ 蓝图 ”来创建相同“类型”的许多对象。创建“对象类型”的方法是使用对象构造函数。在上面的示例中,function Person()是一个对象构造函数。通过使用new关键字调用构造函数来创建相同类型的对象:
    var myFather = new Person("John", "Doe", 50, "blue");
    var myMother = new Person("Sally", "Rally", 48, "green");
    尝试一下
  • this关键字

    在JavaScript中,调用的this是“拥有”代码的对象。this在对象中使用时,值是对象本身。在构造函数this中没有值。它是新对象的替代品。this创建新对象时,将成为新对象的值。
    请注意,这this不是变量。这是一个关键字。你无法改变this的值。
  • 向对象添加属性

    将新属性添加到现有对象很容易:
    myFather.nationality = "English";
    尝试一下
    该属性将添加到myFather。不是我myMother。(不是任何其他人的对象)。
  • 向对象添加方法

    向现有对象添加新方法很简单:
    myFather.name = function () {
      return this.firstName + " " + this.lastName;
    };
    尝试一下
    该方法将添加到myFather。不是我myMother。(不是任何其他人的对象)。
  • 将属性添加到构造函数

    您不能像向现有对象添加新属性一样向对象构造函数添加新属性:
    Person.nationality = "English";
    尝试一下
    要向构造函数添加新属性,必须将其添加到构造函数:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
      this.nationality = "English";
    }
    尝试一下
  • 将方法添加到构造函数

    您的构造函数也可以定义方法:
    function Person(first, last, age, eyecolor) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eyecolor;
      this.name = function() {return this.firstName + " " + this.lastName;};
    }
    尝试一下
    您不能像向现有对象添加新方法一样向对象构造函数添加新方法。向对象添加方法必须在构造函数内部完成:
    function Person(firstName, lastName, age, eyeColor) {
      this.firstName = firstName;  
      this.lastName = lastName;
      this.age = age;
      this.eyeColor = eyeColor;
      this.changeName = function (name) {
        this.lastName = name;
      };
    }
    changeName()函数将name的值赋给person的lastName属性。
    现在你可以尝试:
    myMother.changeName("Doe");
    尝试一下
  • 内置JavaScript构造函数

    JavaScript具有用于自然对象的内置构造函数:
    var x1 = new Object();    // 一个新的Object对象
    var x2 = new String();    // 一个新的String对象
    var x3 = new Number();    // 一个新的Number对象
    var x4 = new Boolean();   // 一个新的Boolean对象
    var x5 = new Array();     // 一个新的Array对象
    var x6 = new RegExp();    // 一个新的RegExp对象
    var x7 = new Function();  // 一个新的Function对象
    var x8 = new Date();      // 一个新的Date对象
    尝试一下
    Math()对象不在列表中。Math是一个全全局的对象。Math无法使用new关键字 。
  • 你知道吗?

    正如你可以在上面看到,JavaScript有对象的基本数据类型的String,Number以及Boolean。但没有理由创建复杂的对象。原始值要快得多。使用对象文字{}而不是new Object()。使用字符串文字""而不是new String()。使用数字文字12345而不是new Number()。使用布尔文字true / false而不是new Boolean()。使用数组文字[]而不是new Array()。使用模式文字/()/而不是new RegExp()。使用函数表达式() {}代替new Function()。
    var x1 = {};            // 新对象
    var x2 = "";            // 新的原始字符串
    var x3 = 0;             // 新的原始数字
    var x4 = false;         // 新的原始布尔值
    var x5 = [];            // 新的数组对象
    var x6 = /()/           // 新的正则表达式对象
    var x7 = function(){};  // 新功能对象
    
    尝试一下
  • new创建基本类型对象方法

    字符串对象

    通常,字符串被创建为基元: var firstName = "John", 但是也可以使用new关键字将字符串创建为对象:var firstName = new String("John"),在JavaScript字符串章节中了解为什么不应将字符串创建为对象 。

    数字对象

    通常,数字被创建为基元: var x = 123,但是也可以使用new关键字将数字创建为对象:var x = new Number(123),了解为什么不应在JavaScript数字章节中将数字创建为对象 。

    布尔对象

    通常,布尔值被创建为基元: var x = false,但是布尔值也可以使用new关键字创建为对象:var x = new Boolean(false),在JavaScript布尔一章中了解为什么不应该将布尔值创建为对象 。