JavaScript 类和代理是什么

JavaScript 类和代理是什么

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

定义一个类: 可以使用类关键字和构造函数来定义一个类。

语法:

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

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

JavaScript

<script>
    class Employee {
        constructor(name, id) {
            this.name = name;
            this.id = id;
        }
    }
    let Employee1 = new Employee("Suraj", 533);
    console.log(Employee1);
</script>

输出:

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

类表达式: 我们还可以使用类表达式来定义一个类。类表达式可以是“命名”或“未命名”两种类型。类的名称可以通过name 属性访问。

语法:

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

示例:

JavaScript

<script>
 
   // Unnamed class
    let Employee1 = class {
        constructor(name, id) {
            this.name = name;
            this.id = id;
        }
    }
    console.log(Employee1.name);   
 
   // Named class
    let Employee2 = class Intern {
        constructor(name, id) {
            this.name = name;
            this.id = id;
        }
    }
    console.log(Employee2.name);        
</script>

输出:

Employee1
Intern

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

语法:

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

示例:

JavaScript

<script>
    class Employee {
        constructor(name, id) {
            this.name = name;
            this.id = id;
        }
       
        // Without parameter
        getname(){
            return "Name of Employee: "+this.name; 
        }
       
        // With parameter
        getdept(department){
            return "Works in " + department;
        }
    }
 
    let Employee1 = new Employee("Suraj", 533);
    console.log(Employee1.getname());
    console.log(Employee1.getdept("Finance department"));
</script>

输出结果:

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

<script>
    const target = {
        property1: "GeeksforGeeks",
        property2: "Computer science portal"
    };
 
    const handler = {};
    const proxy = new Proxy(target, handler);
 
    console.log(proxy.property1); 
    console.log(proxy.property2); 
</script>

输出:

GeeksforGeeks
Computer science portal

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

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

示例: 我们在处理程序中应用了一个条件,来检查目标的“property2”,此时输出应该与目标的原始属性不同。

JavaScript

<script>
    const target = {
        property1: "GeeksforGeeks",
        property2: "Computer science portal"
    };
 
    const handler = {
        get: function (target, prop, receiver) {
            if (prop === "property2") {
                return "For computer science geeks";
            }
            else{
                return Reflect.get(target,prop);
            }
        }
     }
        const proxy = new Proxy(target, handler);
 
        console.log(proxy.property1); 
        console.log(proxy.property2); 
</script>

输出:

GeeksforGeeks
For computer science geeks

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程