关键词

JavaScript高级程序设计 阅读笔记(十三) js定义类或对象

JavaScript高级程序设计第十三章主要讲述了JavaScript中定义类或对象的方式及相关概念,包括工厂模式、构造函数模式、原型模式、组合模式等。下面我会针对这些主题进行详细讲解。

工厂模式

工厂模式是一种创建对象的方法,它利用函数来创建不同类型的对象。可以通过工厂模式来创建任意数量的对象。它的一个关键优势是,它可以隐藏创建对象的细节,使得外部代码只需知道返回的对象即可,而不用在意对象是如何创建的。

示例代码如下:

function createPerson(name, age, job) {
  var o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function() {
    console.log(this.name);
  };
  return o;
}

var person1 = createPerson("Tom", 29, "Software Engineer");
var person2 = createPerson("Jerry", 31, "Doctor");

person1.sayName(); // "Tom"
person2.sayName(); // "Jerry"

在这个例子中,我们创建了两个不同的人员对象并通过等于号将其赋值给不同的变量。这两个变量持有的引用代表两个不同的对象。同时,我们使用了工厂模式,其中函数createPerson()充当了工厂的角色。

构造函数模式

除了工厂模式,JavaScript中还有一种定义类或对象的方式叫做构造函数。构造函数几乎相当于传统面向对象编程中的类,可以用来创建多个相似的对象。构造函数的特点是使用new关键字创建对象,而函数名通常以大写字母开头。

示例代码如下:

function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function() {
    console.log(this.name);
  };
}

var person1 = new Person("Tom", 29, "Software Engineer);
var person2 = new Person("Jerry", 31, "Doctor");

person1.sayName(); // "Tom"
person2.sayName(); // "Jerry"

在这个例子中,我们使用了构造函数Person()并从中创建了两个对象。我们使用了this关键字定义了对象属性和方法。然后,我们使用了new关键字来创建对象,并在构造函数中定义了对象的属性和方法。这样我们可以轻松地通过构造函数来创建多个相似的对象。

原型模式

原型模式是一种定义类和对象的方式,面向对象编程中广泛适用。JavaScript中的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象。这个对象中包含了可以通过该函数创建的实例的共享方法和属性。

示例代码如下:

function Person() {}

Person.prototype.name = "Tom";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
  console.log(this.name);
};

var person1 = new Person();
person1.sayName(); // "Tom"

var person2 = new Person();
person2.sayName(); // "Tom"

在这个例子中,我们定义了一个构造函数Person(),并在其原型上定义了属性和方法。在这种情况下,Person()的三个属性name、age和job就是Person()的所有实例所共享的属性。在创建Person的实例时只会在实例中创建一个指向Person.prototype的指针。

组合模式

组合模式是一个优秀的JavaScript编程实践。它结合了构造函数模式和原型模式的优点,实现了创建具有共享属性和方法的对象的GitHub。
示例代码如下:

function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
}

Person.prototype = {
  sayName: function() {
    console.log(this.name);
  }
};

var person1 = new Person("Tom", 29, "Software Engineer");
var person2 = new Person("Jerry", 31, "Doctor");

person1.sayName(); // "Tom"
person2.sayName(); // "Jerry"

在这个例子中我们使用了构造函数模式来定义name、age和job三个属性,然后使用原型模式来定义sayName()方法。由于通常情况下,方法比属性更重要,因此可以说这种方法比构造函数模式更为常用和推荐。这种创建对象的方式既兼顾了高效性,又使代码简洁易读。

以上就是JavaScript高级程序设计第十三章提到的工厂模式、构造函数模式、原型模式和组合模式等定义类或对象的方式及相关概念的完整攻略,希望能够帮助你更好地理解这些概念。

本文链接:http://task.lmcjl.com/news/8268.html

展开阅读全文