针对“谈谈我对JavaScript原型和闭包系列理解(随手笔记8)”这个话题,我将提供以下攻略:
1. 原型
什么是原型
在JavaScript中,除了基本数据类型(Number、Boolean、String、Undefined、Null)、对象类型(Object)和函数类型(Function)外,还有一种被称为原型对象(Prototype Object)的特殊类型。每个对象都有原型对象,这个原型对象相当于一个模板,直接或间接地定义了该对象的属性和方法。
原型链
如果在当前实例中找不到某个属性或方法,就会去它的原型对象中查找,如果还找不到,再去原型对象的原型对象(即原型链上的下一个对象)中查找,直到找到为止。这就是原型链的实现方式。
构造函数
构造函数是用来生成对象的,它专门定义了一种类型的对象,其内部使用了this关键字。通过new关键字来调用构造函数,可以新建一个对象(实例)。而这个对象的原型对象,就是构造函数的prototype属性所指向的那个对象。
示例
function Person(name, age) {
this.name = name; // 实例属性
this.age = age;
}
Person.prototype.sayHello = function() { // 原型方法
console.log(`Hello, My name is ${this.name}.`);
}
const person1 = new Person("张三", 20);
const person2 = new Person("李四", 30);
person1.sayHello(); // 输出: Hello, My name is 张三.
person2.sayHello(); // 输出: Hello, My name is 李四.
console.log(person1.__proto__ === Person.prototype); // 输出: true
console.log(person2.__proto__ === Person.prototype); // 输出: true
console.log(Person.prototype.__proto__ === Object.prototype); // 输出: true
2. 闭包
什么是闭包
闭包指的是能够访问自由变量的函数,也就是在函数内部定义的一个函数,能够访问外层函数的变量,并将其保留在内存中,从而使得外层函数的局部变量可以在内部函数被调用后继续被访问,这样的函数就被称为闭包。
闭包的应用
闭包的主要应用场景就是封装变量,实现私有变量和私有方法的效果,从而避免全局变量污染,提高代码的可维护性和安全性。
示例
function counter() {
let count = 0; // 定义私有变量
function increment() { // 定义内部函数
count++;
console.log(count);
}
function decrement() { // 定义内部函数
count--;
console.log(count);
}
return {
increment, // 返回含有内部函数的对象
decrement
};
}
const myCounter = counter();
myCounter.increment(); // 输出: 1
myCounter.increment(); // 输出: 2
myCounter.increment(); // 输出: 3
myCounter.decrement(); // 输出: 2
以上就是我对JavaScript原型和闭包的理解,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:谈谈我对JavaScript原型和闭包系列理解(随手笔记8) - Python技术站