JavaScript的public、private和privileged模式

JavaScript是基于对象的编程语言,因此在讨论其公共、私有和特权模式时,通常是在对象和类的上下文中。

公共模式(Public Mode)

在JavaScript中,公共模式是指公共成员是可以通过对象外部进行访问的成员。例如,我们可以创建一个简单的Person类:

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

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old.");
  }
}

在这个例子中,“name”和“age”属性以及“sayHello”方法都是公共的,因为它们可以从类的外部访问。当我们创建一个Person对象时,我们可以访问这些成员:

var person = new Person("John", 30);
console.log(person.name); //John
console.log(person.age); //30
person.sayHello(); //Hello, my name is John and I am 30 years old.

私有模式(Private Mode)

在JavaScript中,私有模式是指只有在类内部才可以访问的成员。通常,我们使用闭包来实现私有成员。例如:

function Person(name, age) {
  var privateVar = "This is a private variable";

  var privateMethod = function() {
    console.log("This is a private method");
  }

  this.name = name;
  this.age = age;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old.");

    //可以在类内部访问私有成员
    console.log(privateVar);
    privateMethod();
  }
}

在这个例子中,“privateVar”和“privateMethod”都是私有的,因为它们只能在类内部访问。当我们创建一个Person对象时,我们无法直接访问这些成员:

var person = new Person("John", 30);
console.log(person.privateVar); //undefined
person.privateMethod(); //TypeError: person.privateMethod is not a function

特权模式(Privileged Mode)

在JavaScript中,特权模式是指只有在类内部和子类内部才可以访问的成员。通常,我们使用特权方法来实现特权成员。例如:

function Person(name, age) {
  var privateVar = "This is a private variable";

  var privateMethod = function() {
    console.log("This is a private method");
  }

  this.name = name;
  this.age = age;

  //特权方法
  this.getPrivateVar = function() {
    return privateVar;
  }

  this.setPrivateVar = function(value) {
    privateVar = value;
  }

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old.");

    //可以在类内部访问私有成员
    console.log(privateVar);
    privateMethod();
  }
}

在这个例子中,“getPrivateVar”和“setPrivateVar”都是特权的,因为它们只能在类内部和子类内部访问。当我们创建一个Person对象时,我们可以访问这些成员:

var person = new Person("John", 30);

//使用特权方法
console.log(person.getPrivateVar()); //This is a private variable
person.setPrivateVar("New private value");
console.log(person.getPrivateVar()); //New private value

示例说明

示例1:实现JavaScript对象的私有属性

在下面的示例中,我们将实现一个人类(Person)的私有属性,用于存储人的偏好颜色。只有在Person类内部才可以访问这个私有属性,在类的外部是无法访问的。我们使用闭包将偏好颜色存储在私有变量中。

function Person(name, age) {
  var preferences = {
    color: "blue"
  };

  this.name = name;
  this.age = age;

  //特权方法
  this.getColorPreference = function() {
    return preferences.color;
  }

  this.setColorPreference = function(color) {
    preferences.color = color;
  }

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old.");
  }
}

在这里,我们将偏好颜色存储在名为“preferences”的私有变量中。我们使用特权方法“getColorPreference”和“setColorPreference”来获取或设置偏好颜色。在“sayHello”方法中,我们演示了如何使用公共方法访问这些成员。在Person类的外部,我们无法直接访问preferences属性:

var person = new Person("John", 30);

console.log(person.getColorPreference()); //blue

person.setColorPreference("red");

console.log(person.getColorPreference()); //red

console.log(person.preferences); //undefined - 无法直接访问preferences

示例2:使用prototype定义公共方法

在JavaScript中定义公共方法有两种不同的方法:在类构造函数中定义方法,或使用prototype属性在类定义之后定义方法。第一种方法可以使方法访问类的私有成员,但也会在每次创建对象时重新定义方法,因此使用prototype的方法更加高效。下面的示例演示了如何使用prototype属性定义公共方法:

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

Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old.");
}

在这个例子中,我们使用prototype属性“sayHello”方法。无论创建多少次Person对象,这个方法只会在内存中定义一次,因此它更加高效。我们使用“this”关键字来访问公共属性“name”和“age”。

var person1 = new Person("John", 30);
var person2 = new Person("Mary", 25);

person1.sayHello(); //Hello, my name is John and I am 30 years old.
person2.sayHello(); //Hello, my name is Mary and I am 25 years old.

通过使用prototype属性创建公共方法,我们可以使代码更加简洁和高效,并且不需要多次定义相同的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript的public、private和privileged模式 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • node爬取新型冠状病毒的疫情实时动态

    “node爬取新型冠状病毒的疫情实时动态”可以通过编写一个node爬虫来完成。下面是完整攻略的步骤: 1. 确定目标网站 首先明确我们要爬取的疫情实时动态信息发布的网站,可以通过查找查询“新型冠状病毒疫情实时动态”得知,目前国内有多个网站可以获取疫情动态信息,比如腾讯新闻疫情实时动态、丁香园疫情实时动态等,这里我们以丁香园为例进行讲解。 2. 分析网站结构 …

    JavaScript 2023年6月11日
    00
  • 解析Json字符串的三种方法日常常用

    当你需要从后端获取JSON格式的数据并在前端使用时,你需要解析该JSON字符串,将其转换为JavaScript对象,从而方便你在前端进行数据处理和呈现。下面将介绍三种常用的解析JSON字符串的方法: 1. 手动解析 手动解析JSON是最基本的方法。步骤如下: 使用JSON.parse()将JSON字符串转换为JavaScript对象 访问JavaScript…

    JavaScript 2023年5月27日
    00
  • Javascript 异步加载详解(浏览器在javascript的加载方式)

    Javascript 异步加载详解(浏览器在javascript的加载方式) 什么是异步加载 在JavaScript中,异步加载是指浏览器在加载JavaScript文件时,并不会等待文件完全加载完成后再去执行JavaScript文件内的代码。异步加载的好处在于页面不会因为JavaScript加载而被阻塞,同时也可以提高页面的加载速度和性能。 实现异步加载的方…

    JavaScript 2023年5月27日
    00
  • Javascript实现视频轮播在pc端与移动端均可

    下面是“Javascript实现视频轮播在pc端与移动端均可”的完整攻略。 1. 视频轮播的基本概念 首先,我们需要了解什么是视频轮播。视频轮播是指一段视频或多段视频在一定时间内自动播放,一般会在网站的首页或特定页面上展示。在PC端视频轮播多为横向滚动轮播,而在移动端多为纵向滚动轮播。 2. 实现视频轮播的基本方法 主要通过监听轮播事件、控制视频播放、实现自…

    JavaScript 2023年6月11日
    00
  • JS实现获取时间已经时间与时间戳转换

    要实现获取当前时间及时间戳,以及将时间戳转换为时间,可以在 JavaScript 中使用 Date 对象和相应的方法实现。下面是实现该功能的完整攻略: 1. 获取当前时间和时间戳 使用 Date 对象获取当前时间 let currentDate = new Date(); console.log(currentDate); 在控制台输出当前日期和时间对象的信…

    JavaScript 2023年5月27日
    00
  • JavaScript常用脚本汇总(三)

    下面来详细讲解一下“JavaScript常用脚本汇总(三)”。 概述 本文是JavaScript常用脚本汇总系列的第三篇,主要介绍一些常用的JavaScript脚本及其用法,希望能为广大JavaScript开发者提供一些参考和帮助。本文内容主要包括:局部刷新页面、自动保存草稿、获取浏览器版本信息和判断是否为移动端等。 局部刷新页面 在传统的Web应用程序中,…

    JavaScript 2023年5月18日
    00
  • JavaScript常见事件处理程序实例总结

    下面是“JavaScript常见事件处理程序实例总结”的完整攻略: 简介 在Web开发中,事件处理程序是常用的技术,其在页面交互、动态特效、表单验证等方面都有广泛应用。JavaScript作为一门客户端语言,提供了丰富的事件处理程序实现方式,比如DOM0级事件处理程序、DOM2级事件处理程序、事件委托、自定义事件等技术。 本文将详细介绍JavaScript常…

    JavaScript 2023年5月28日
    00
  • 用js实现下载远程文件并保存在本地的脚本

    要用JS实现下载远程文件并保存在本地,可以借助浏览器中的XMLHttpRequest对象和Blob对象。以下是实现此功能的步骤: 1. 发送HTTP请求 使用XMLHttpRequest对象发送HTTP请求,一般使用GET或POST请求方式,获取需要下载的远程文件的二进制内容。 function downloadFile(url, callback) { v…

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