《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析

内容包括以下几个部分:

  1. 简介:介绍Javascript设计模式是什么,为什么需要学习它。

  2. Javascript面向对象程序设计对象成员的定义分析:

  3. 构造函数与原型:解释构造函数和原型的概念,讲解如何通过构造函数和原型定义对象的成员,以及它们之间的关系。

  4. defineProperty方法:介绍defineProperty方法用于定义对象的属性,包括数据属性和访问器属性,并给出实例说明。

  5. 示例说明:

  6. 示例1:通过构造函数和原型定义一个人(Person)类,并定义其中的成员。

  7. 示例2:使用defineProperty方法定义一个人(Person)类中的属性,包括数据属性和访问器属性。

下面开始详细讲解。

  1. 简介:

Javascript设计模式是一种为解决编程中常见问题而形成的最佳实践方法,它能够提供灵活的解决方案并提高代码的可维护性、可扩展性。在面向对象的编程中,对象成员的定义是常见的问题,因此需要学习Javascript面向对象程序设计中对象成员的定义方法。

  1. Javascript面向对象程序设计对象成员的定义分析:

    • 构造函数与原型:构造函数是用于创建对象的函数,通过new关键字调用构造函数可以创建一个实例对象。原型是每个javascript对象中都有的一个属性,指向该对象的原型,并且包含了一些共享的成员。

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

Person.prototype.sayHi = function() {
  console.log('Hi, my name is ' + this.name);
}

var person1 = new Person('Tom', 18);
console.log(person1.name); // 输出Tom
person1.sayHi(); // 输出Hi, my name is Tom

上面的例子中定义了一个Person类,通过构造函数定义name和age属性,并通过原型定义sayHi方法。可以看出,构造函数和原型是分别定义对象成员的,构造函数用于定义实例属性,原型用于定义共享属性,二者之间通过原型链连接在一起。

- defineProperty方法:defineProperty方法是Javascript中用于定义对象属性的方法,包括两种类型的属性:数据属性和访问器属性。

var person = {};

// 定义数据属性,包括value、writable、enumerable、configurable四个属性
Object.defineProperty(person, "name", {
  value: "Tom",
  writable: false,
  enumerable: true,
  configurable: true
});

// 定义访问器属性,包括get、set、enumerable、configurable四个属性
var _age = 18;
Object.defineProperty(person, "age", {
  get: function() {
    return _age;
  },
  set: function(value) {
    if (value > 0 && value < 200) {
      _age = value;
    }
  },
  enumerable: true,
  configurable: true
});

console.log(person.name); // 输出Tom
console.log(person.age); // 输出18
person.age = 20;
console.log(person.age); // 输出20

上面的例子中通过defineProperty方法定义了一个包含数据属性和访问器属性的person对象,可以看出,数据属性通过value属性指定初始值,访问器属性通过get和set方法控制访问和修改属性值的行为。

  1. 示例说明:

    • 示例1:通过构造函数和原型定义一个人(Person)类,并定义其中的成员。

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

Person.prototype.sayHi = function() {
  console.log('Hi, my name is ' + this.name);
}

var person1 = new Person('Tom', 18);
console.log(person1.name); // 输出Tom
person1.sayHi(); // 输出Hi, my name is Tom

上面的例子中定义了一个具有name和age属性,以及sayHi方法的Person类。可以看出,这个类使用构造函数和原型定义成员,属性使用构造函数定义,方法使用原型定义。使用构造函数定义属性可以保证每个实例都具有各自独立且初始值不一样的属性,使用原型定义方法可以确保所有实例都共享同一个方法并且节约内存。

- 示例2:使用defineProperty方法定义一个人(Person)类中的属性,包括数据属性和访问器属性。

function Person() {}

var _name = "";
Object.defineProperty(Person.prototype, "name", {
  get: function() {
    return _name;
  },
  set: function(value) {
    if (value.length < 20) {
      _name = value;
    }
  },
  enumerable: true,
  configurable: true
});

var person1 = new Person();
person1.name = "This is a very long name which should not be allowed";
console.log(person1.name); // 输出空字符串

上面的例子中使用defineProperty方法定义了一个Person类中的属性name,通过get和set方法控制属性值的存取,可以看出,属性的值经过set方法的限制后,被赋值为空字符串。这个例子也展示了如何使用defineProperty方法定义访问器属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java如何交换这两个变量的值方法介绍

    下面我来为您详细讲解“java如何交换这两个变量的值方法介绍”。 在Java中,有多种方法可以交换两个变量的值,常见的方法有使用中间变量、使用加减法和使用异或运算。 使用中间变量交换变量值 这是一种最简单的方法,通过定义一个中间变量来存储变量值,然后交换两个变量的值。示例代码如下: int a = 10; int b = 20; int temp = a; …

    Java 2023年5月26日
    00
  • Java的Struts框架报错“NullActionFormException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullActionFormException”错误。这个错误通常由以下原因之一起: 表单对象为空:如果表单对象为空,则可能会出现此。在这种情况下,需要检查表单对象以解决此问题。 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 以下是两个实例: 例 1 如果表单对…

    Java 2023年5月5日
    00
  • Java实现几种序列化方式总结

    Java实现几种序列化方式总结 什么是序列化 序列化是将对象转换为字节流的过程,目的是为了在网络上传输或者将对象转存储到硬盘等介质中。 Java中的序列化 在Java中,实现序列化需要满足两个条件:一是实现Serializable接口,二是定义一个静态的序列化ID,例如: import java.io.Serializable; public class P…

    Java 2023年5月18日
    00
  • Java中对象的序列化详解及实例

    Java中对象的序列化详解及实例攻略 什么是序列化 序列化是将对象转换为字节序列的过程,以便将其存储到文件或内存缓冲区中,也可以通过网络传输到另一个计算机中。反序列化则是从字节序列中重构对象的过程。 在Java中,序列化是通过实现Serializable接口来实现的。该接口中没有方法,只是用来指示该类是可序列化的。 序列化的作用 序列化在实际开发中非常有用。…

    Java 2023年5月26日
    00
  • java获取本月日历表的方法

    要获取本月的日历表,可以使用Java中的Calendar类来实现。下面是详细步骤: 1.获取当前月份的第一天我们可以使用Calendar类的getActualMinimum()方法,将日历字段设置为该字段可能的最小值,例如我们将日历字段设置为月份的最小值,即Calendar.MONTH,然后使用getActualMinimum(Calendar.DATE)方…

    Java 2023年5月20日
    00
  • Springboot2.1.6集成activiti7出现登录验证的实现

    下面是详细的讲解。 准备工作 在开始实现之前,我们需要做以下准备工作: 安装和配置好 JDK 环境 安装好 Maven 在本地计算机上安装好 MySQL 数据库,并创建一个数据库,用于存储 Activiti 的相关数据 下载并安装 IntelliJ IDEA,作为开发和运行环境使用 添加依赖 首先,在 pom.xml 文件中添加以下依赖: <!– S…

    Java 2023年5月20日
    00
  • Gson之toJson和fromJson方法的具体使用

    标题: Gson之toJson和fromJson方法的具体使用攻略 概述:GSON 是 Google 提供的 JSON 库,在 Android 应用开发中是经常被用到的,在实现 JSON 的序列化和反序列化时会用到 toJson() 和 fromJson() 方法。 toJson() 方法是将 Java 对象转换成 JSON 对象,而fromJson() 方…

    Java 2023年5月26日
    00
  • Spring配置动态数据源实现读写分离的方法

    下面是Spring配置动态数据源实现读写分离的方法的完整攻略。 什么是动态数据源? 动态数据源是指可以在应用程序运行时动态地切换不同的数据源,以便满足应用程序的需求。在实际应用程序中,常见的用途是实现数据库读写分离,将读操作分配到只读数据库,将写操作分配到主数据库。 实现步骤 引入依赖 在 pom.xml 中添加以下依赖: <dependency&gt…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部