JavaScript中自执行函数(IIFE)与类(Class)

自执行函数(IIFE)

  • 定义: 自执行函数(IIFE, Immediately Invoked Function Expression)是一种函数表达式,它在定义后立即执行。它通常用于创建一个新的作用域来避免变量污染全局作用域。
  • 语法
(function() {
    // 这里是函数体
    console.log('I am an IIFE!');
})();

  • 示例
// 传统的 IIFE
(function() {
    var x = 'Hello';
    console.log(x); // 输出 'Hello'
})();

// 外部无法访问 x
console.log(typeof x); // 输出 'undefined'

IIFE 返回一个对象,其中包含自定义函数,将自定义函数暴露到外部作用域中。这可以通过 IIFE 返回一个对象来实现

const module = (function() {
    // 内部函数
    function privateFunction() {
        console.log('This is a private function.');
    }

    // 公共函数
    function publicFunction() {
        console.log('This is a public function.');
    }

    // 返回一个对象,将公共函数暴露到外部
    return {
        publicFunction: publicFunction
    };
})();

// 调用暴露的公共函数
module.publicFunction(); // 输出: This is a public function.

// 尝试调用私有函数会失败
// module.privateFunction(); // TypeError: module.privateFunction is not a function

自执行函数(IIFE)可以用来模拟类中的构造函数。示例如下:

const MyClass = (function() {
    // 构造函数
    function createInstance(name) {
        return {
            name: name,
            greet: function() {
                console.log(`Hello, my name is ${this.name}.`);
            }
        };
    }

    // 返回构造函数
    return createInstance;
})();

// 创建实例
const instance = MyClass('Alice');
instance.greet(); // 输出: Hello, my name is Alice.

类(class)

  • 定义: class 语法是 ECMAScript 6(ES6)引入的,提供了一种更简单和直观的方式来创建和管理对象的构造函数和原型方法。它是 JavaScript 的面向对象编程(OOP)的一部分。
  • 语法
class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
}

// 创建一个 Person 实例
const person1 = new Person('Alice', 30);
person1.greet(); // 输出 'Hello, my name is Alice and I am 30 years old.'
  • 特点
    构造函数: constructor 方法是创建对象时自动调用的方法。
    原型方法: 方法定义在类的内部,可以被所有实例共享。
    继承: 可以通过 extends 关键字创建子类,继承父类的属性和方法。
  • 示例
class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog = new Dog('Rover');
dog.speak(); // 输出 'Rover barks.'

对比

IIFE: 主要用于创建局部作用域,保护变量不被外部访问,常用于模块化代码。
class: 主要用于面向对象编程,提供了一种结构化的方式来创建对象和管理继承关系。
自执行函数可以模拟类

  • 模拟类及其构造函数
const MyClass = (function() {
    // 构造函数
    function MyClass(name) {
        this.name = name;
    }

    // 原型方法
    MyClass.prototype.greet = function() {
        console.log(`Hello, my name is ${this.name}.`);
    };

    // 返回构造函数
    return MyClass;
})();

// 创建实例
const instance = new MyClass('Alice');
instance.greet(); // 输出: Hello, my name is Alice.

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值