📜  JavaScript 中的类和代理是什么?

📅  最后修改于: 2022-05-13 01:56:32.905000             🧑  作者: Mango

JavaScript 中的类和代理是什么?

这些几乎与函数相似,只是它们使用类关键字而不是函数关键字。函数和类之间的另一个重要区别是函数可以在定义之前在代码中调用,而类必须在用 JavaScript 构造类对象之前定义,否则运行代码将引发引用错误。

定义类:可以通过使用 class 关键字以及构造函数对其进行初始化来定义类。

句法:

class Classname {
    constructor(property1, property2) {
        this.property1 = property1;
        this.property2 = property2;
    }
}

示例:下面的示例描述了一个简单的类。

JavaScript


JavaScript


JavaScript


JavaScript


JavaScript


输出:

Employee {name: 'Suraj', id: 533}
id: 533
name: "Suraj"
[[Prototype]]: Object

类表达式:我们也可以使用类表达式定义一个类。它们可以有两种类型,即“命名”或“未命名”。类名可以通过 名称属性。

句法:

let Employee = class {
      constructor(name, id) {
          this.name = name;
          this.id = id;
      }
}

例子:

JavaScript


输出:

Employee1
Intern

类方法:我们也可以在类内部定义方法。它可以带或不带参数。

句法:

class Classname {
 constructor(property1, property2) {
   this.property1 = property1;
   this.property2 = property2;
 }
 method1() { ... }
}

例子:

JavaScript


输出:

Name of Employee: Suraj
Works in Finance department

代理:代理是用于重新定义对象的基本操作的对象。它允许我们创建另一个对象的代理。

参数:

代理对象接受下面描述的两个参数:

  • 目标:它是我们想要用代理包装的原始对象。
  • 处理程序:一个对象,其属性定义代理在该代理上执行操作时的行为。

句法:

const target = {
   property1: "first property",
   property2: "second property"
};
const handler = { ... };
const proxy1 = new Proxy(target, handler);

例子:

JavaScript


输出:

GeeksforGeeks
Computer science portal

由于处理程序为空,因此不会影响目标。因此,代理的行为与其原始目标一样。

我们还可以在处理程序中定义操作以更改代理从其原始目标的属性。为此,我们需要使用get()处理程序,它可以访问目标的属性并操纵代理内部的属性。反射类有助于将目标的原始属性应用于代理。

示例:我们在处理程序中应用了 if 条件,以检查目标的“property2”,输出应从目标的原始属性更改。

JavaScript


输出:

GeeksforGeeks
For computer science geeks