《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日

相关文章

  • java8 LocalDate 使用详解

    Java8 LocalDate 使用详解 什么是LocalDate LocalDate是Java8中用于处理日期的类,它能表示一个ISO-8601标准的日期(如2019-03-29)。相比于Java中旧的日期类(如Date和Calendar)而言,LocalDate有着更好的易用性、更加清晰的语义和更强大的功能。 基本用法 创建LocalDate 使用静态方…

    Java 2023年5月20日
    00
  • 浅谈Mybatis获取参数值的方式

    下面是详细的“浅谈Mybatis获取参数值的方式”的攻略。 前言 在Mybatis中获取参数值是常见的操作。本文将向你介绍Mybatis中获取参数值的方式,帮助你更好的使用Mybatis。 直接获取参数名 可以直接在Mapper方法的参数中来获取实际传入参数的名称和值。 代码示例 public interface UserMapper{ void inser…

    Java 2023年5月20日
    00
  • java mybatis框架配置详解

    Java MyBatis框架配置详解 1. 简介 MyBatis是一个用Java编写的开源ORM(object relational mapping)框架。它通过XML或注解方式向数据库发送SQL语句,执行相应的操作,并将结果映射到Java对象中。 MyBatis具有以下优点: 灵活性较高,可以使用纯SQL,减少了ORM框架带来的性能压力。 可以进行批处理,…

    Java 2023年5月20日
    00
  • Spring框架初始化解析

    Spring框架初始化解析 Spring框架是由Java编写的一个轻量级的开源框架,主要用于开发企业级应用程序。Spring框架核心是IoC(控制反转)和AOP(面向切面编程)。在使用Spring框架之前,需要先对Spring框架的初始化有一定的认识。 Spring框架初始化步骤 Spring框架的初始化步骤如下: 创建BeanFactory对象 解析Bea…

    Java 2023年5月19日
    00
  • JSP 中文字符处理代码

    JSP 中文字符处理是Web开发中一个常见问题,本文针对JSP中文字符处理提供一些攻略。 一、确保JSP页面编码和文件编码一致 JSP页面的编码格式需要和文件编码格式一致,包括jsp文件本身的编码、jsp引用的外部文件(如CSS、JS等)和JSP应用程序中的所有文件。可以使用以下代码在JSP页面中指定编码格式: <%@ page contentType…

    Java 2023年6月15日
    00
  • Java中InputSteam怎么转String

    转换InputStream为String,可以使用Java中的Scanner类、BufferedReader类、ByteArrayOutputStream类、StringBuilder类等方式。 其中,Scanner类适用于转换小型InputStream,BufferedReader适用于转换大型InputStream,ByteArrayOutputStre…

    Java 2023年5月26日
    00
  • Java中为什么重写equals()也需要重写hashCode()?

    所有类默认继承Object类 先看一下Object源码 package java.lang; public class Object { //默认调用本地的hashcode()方法 根据内存地址生成hash值 避免不了哈希冲突 public native int hashCode(); //默认调用的equals方法比较的是’==’比较 //基本类型比较的是…

    Java 2023年4月25日
    00
  • Java中replace、replaceAll和replaceFirst函数的用法小结

    Java中replace、replaceAll和replaceFirst函数的用法小结 在Java编程中,字符串操作是很常见的,而替换字符串是其中常用的操作之一。Java提供了三种函数用于替换字符串:replace、replaceAll和replaceFirst。这篇文章将为您详细介绍它们的用法。 replace函数 replace函数接收两个参数,用于将原…

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