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日

相关文章

  • 在JavaScript中如何解决用execCommand(

    在JavaScript中,可以使用execCommand()方法来执行一些富文本编辑操作,如加粗、斜体、插入链接等。下面是一些解决execCommand()的方法以及示例说明。 方法一:使用document.execCommand() 使用document.execCommand()方法可以直接执行一些富文本编辑操作,如下示例代码演示了如何在文本框中插入一段…

    JavaScript 2023年6月11日
    00
  • JavaScript Dom实现轮播图原理和实例

    下面是“JavaScript Dom实现轮播图原理和实例”的完整攻略。 什么是JavaScript DOM? JavaScript DOM(Document Object Model,文档对象模型)是一种对HTML、XML、SVG等文档进行抽象和概念化的方式。它将文档视为对象的集合,其中每个对象可以被操作。JavaScript可以通过DOM,访问和修改文档的…

    JavaScript 2023年6月10日
    00
  • 借助script进行Http跨域请求:JSONP实现原理及代码

    下面是“借助script进行Http跨域请求:JSONP实现原理及代码”的完整攻略。 什么是JSONP? JSONP是一种解决跨域请求的方法,其原理是利用标签的src属性不受同源策略的限制来实现跨域请求。在JSONP中,客户端通过动态创建script标签,向服务端发送一个请求,并指定一个回调函数的名称。服务端接收到请求后,将数据作为参数传递给指定的回调函数,…

    JavaScript 2023年5月27日
    00
  • JavaScript异步加载浅析

    JavaScript 异步加载浅析 在网页开发中,我们经常会遇到需要加载外部资源(如CSS、JS等)的情况。传统的加载方式是同步加载,即在加载完一个资源后才会加载下一个资源,这样会导致页面加载速度较慢,影响用户体验。因此,异步加载成为了一个非常重要的技术。 异步加载是指在加载资源的同时,不会阻塞页面的其他操作,而是充分利用空闲时间进行资源加载。在 JavaS…

    JavaScript 2023年5月27日
    00
  • JS中cookie的使用及缺点讲解

    什么是cookie Cookie是存储在客户端浏览器中的小数据片段,它会在HTTP请求和服务器响应之间传递数据。Cookie通常用于记录用户的登录状态、页面访问记录、用户偏好等信息。 JS中如何使用cookie 1. 设置cookie 要设置Cookie,可以使用document.cookie属性。例如: document.cookie = "us…

    JavaScript 2023年5月19日
    00
  • 超详细的javascript数组方法汇总

    来讲一下“超详细的JavaScript数组方法汇总”的完整攻略。 一、概述 本文总结了 JavaScript 数组常用的方法,包括改变原数组的方法和不改变原数组的方法。这些方法可以操作数组中的数据和数据类型,常用于数据处理、排序、循环等操作。阅读完此文,你将会掌握 JavaScript 数组操作的方方面面。 二、改变原数组的方法 JavaScript 中可改…

    JavaScript 2023年5月27日
    00
  • JavaScript动态插入script的基本思路及实现函数

    JavaScript动态插入script的基本思路是通过创建一个script标签,然后将其添加到文档中。具体的实现可以使用以下的函数: function insertScript(url, callback) { var script = document.createElement(‘script’); script.type = ‘text/javasc…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript实现动态的轮播图效果

    完整攻略:详解JavaScript实现动态的轮播图效果 背景介绍 轮播图是现代网站中常见的交互元素之一,作为一种动态的展示形式,可以吸引用户的注意力,增强用户体验。因此,对于前端开发人员来说,能够熟练掌握实现轮播图的技术是非常重要的。 本篇文章将会详细介绍如何使用JavaScript实现动态的轮播图效果,让读者掌握这项技术。 实现方法 步骤一:HTML结构 …

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