JavaScript函数、闭包、原型、面向对象学习笔记

JavaScript函数学习笔记

什么是函数

函数是 JavaScript 中的一个代码块,它可以重复执行,并且可通过传入参数和返回值来实现对信息的处理和存储。

函数的定义方式

JavaScript 中有多种定义函数的方式,以下是其中常用的三种方式:

1. 函数声明

使用 function 关键字定义的函数,代码如下:

function functionName (arg1, arg2, ..., argN) {
  // 函数体
  return returnValue;
}

其中 functionName 为函数名,arg1, arg2, ..., argN 为参数列表,return 为返回值关键字,returnValue 为返回值。

2. 函数表达式

可以将函数定义为一个变量,代码如下:

var functionName = function (arg1, arg2, ..., argN ) {
  // 函数体
  return returnValue;
}

其中 functionName 为变量名,arg1, arg2, ..., argN 为参数列表,return 为返回值关键字,returnValue 为返回值。

3. 箭头函数

ES6 引入了箭头函数的概念,代码如下:

var functionName = (arg1, arg2, ..., argN) => {
  // 函数体
  return returnValue;
}

其中 functionName 为变量名,arg1, arg2, ..., argN 为参数列表,return 为返回值关键字,returnValue 为返回值。

函数调用

调用一个函数时,需要将传入的参数放在括号内。代码如下:

function add (a, b) {
  return a + b;
}

add(1, 2); // 3

以上代码是调用 add 函数,传入 12 两个参数,并返回它们的和 3

闭包学习笔记

什么是闭包

闭包是在一个函数内部定义另一个函数,这个被定义的函数可以使用其外部函数的变量,但是外部函数却无法访问内部函数的变量。

闭包的作用

使用闭包可以在函数内部定义变量,并且可以避免这些变量对外部环境的污染。

闭包的示例

function outerFunction() {
  var a = 0;
  function innerFunction() {
    a++;
    console.log(a);
  }
  return innerFunction;
}

var fn = outerFunction();
fn(); // 1
fn(); // 2
fn(); // 3

以上代码中,我们在外部函数 outerFunction 中定义了变量 a 和内部函数 innerFunction,内部函数 innerFunction 又可以访问外部函数 outerFunction 中的变量 a,通过将内部函数 innerFunction 赋值给变量 fn 并且调用 fn 函数,a 变量的值被每次自增 1,并打印输出。

原型学习笔记

原型是什么

每个 JavaScript 对象都有一个原型对象,原型对象也是一个对象,或者说是当前对象的父对象。如果我们访问一个对象不存在的属性或方法时,JavaScript 就会在原型对象中查找,如果找到了就直接返回对应的值,如果没有找到,则继续在原型对象的原型对象中查找,直到找到或者到达顶层为止。

原型链是什么

JavaScript 对象之间通过原型来相互关联,形成了所谓的原型链。

构造函数与原型

JavaScript 中的每个函数对象都有一个 prototype 属性,这个属性指向了一个对象,这个对象就是实例化之后所有新创建对象的原型。

通过 new 关键字创建对象时,JavaScript 引擎会将对象的原型链接到构造函数的 prototype 属性所指向的对象上。

用一个简单的例子来说明:

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function () {
  console.log('My name is ' + this.name);
}

var cat = new Animal('Tom');
cat.sayName();

以上代码中,我们定义了一个 Animal 构造函数,并在其 prototype 属性上添加了一个 sayName 方法。

我们通过 new 关键字创建了一个 cat 对象,cat 对象继承了 Animal.prototype 对象上的 sayName 方法,所以可以通过 cat.sayName() 来调用该方法,输出 My name is Tom

面向对象学习笔记

什么是面向对象

面向对象是一种编程思想,其基本概念是将数据和处理数据的方法绑定在一起,形成一个独立的对象。

面向对象的三个特征

  1. 封装:将数据和处理数据的方法包装起来,对外部不可见,只提供一些方法供外界使用。
  2. 继承:子类继承父类的属性和方法,可以重写父类的方法,子类也可以添加新的属性和方法。
  3. 多态:同一方法可以根据不同的对象实现不同的行为。

面向对象的示例

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function () {
  console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');
}

function Student(name, age, grade) {
  Person.call(this, name, age);
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

Student.prototype.sayHello = function () {
  console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old, and I am a student in grade ' + this.grade);
}

var person = new Person('John', 30);
person.sayHello();

var student = new Student('Tom', 18, 'Grade 12');
student.sayHello();

以上代码中,我们定义了一个 Person 构造函数,并在其 prototype 属性上添加了一个 sayHello 方法。

通过继承 Person 构造函数,我们又定义了一个 Student 子类,并在子类中重写了 sayHello 方法,sayHello 方法输出了和 Person 类不同的内容。

通过 new 关键字创建了一个 person 对象,和一个 student 对象,并调用它们的 sayHello 方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript函数、闭包、原型、面向对象学习笔记 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS字符串拼接的几种方式(最新推荐)

    下面是关于JS字符串拼接的几种方式的攻略: 普通字符串拼接 普通字符串拼接是最简单的方式,就是使用+进行连接。例如: let greeting = ‘Hello’; let name = ‘John’; let message = greeting + ‘, ‘ + name + ‘!’; // 最终结果为 ‘Hello, John!’ 模板字符串拼接 ES…

    JavaScript 2023年5月28日
    00
  • JavaScript RegExp方法获取地址栏参数(面向对象)

    下面是详细讲解“JavaScript RegExp方法获取地址栏参数(面向对象)”的完整攻略。 一、问题背景 当我们需要通过 JavaScript 来获取地址栏参数时,通常需要使用正则表达式(RegExp)来解析URL字符串。虽然字符串操作的方式也能解决这个问题,但是 RegExp 方法具有更高的灵活性和精准性,本攻略将详细介绍如何使用 RegExp 方法获…

    JavaScript 2023年6月10日
    00
  • 详解javascript void(0)

    标题:详解javascript void(0) 简介 void(0) 是一个JavaScript语言中的操作符,这个方式可以用来执行一段代码却不返回任何值。通常使用 void(0) 可以防止页面被重定向,即不会跳转到新的页面。 使用方法 常见的使用场景: 在 href 属性中使用 void(0): <a href="javascript:vo…

    JavaScript 2023年5月28日
    00
  • 全面解析js中的原型,原型对象,原型链

    全面解析JS中的原型、原型对象、原型链 1. 原型 在Javascript中,每个函数都有一个内部属性 prototype,可以被称为原型。我们可以通过构造函数的 prototype 属性来为所有实例共享方法和属性。 function Person(name, age) { this.name = name; this.age = age; } Person…

    JavaScript 2023年5月27日
    00
  • 图片动画横条广告带上下滚动的JS代码

    下面我来为你详细讲解如何实现“图片动画横条广告带上下滚动的JS代码”。 1. 准备工作 在开始编写代码之前,首先需要准备好以下内容: 在HTML页面中添加一个容器元素,以放置广告内容。 在CSS样式中,设置容器元素的宽度、高度和背景颜色。 准备好需要展示的广告图片,可以通过链接或直接将图片存放在本地。 编写JS代码来实现图片滚动效果。 2. 实现思路 要实现…

    JavaScript 2023年6月11日
    00
  • JavaScript通过字典进行字符串翻译转换的方法

    JavaScript通过字典进行字符串翻译转换可以使用对象字典的方式来实现。具体的步骤如下: Step 1 定义字典对象(即键值对对象),其中键为需要翻译的原始字符串,值为对应的翻译后的字符串。例如以下代码: const translationDict = { "hello": "你好", "world&qu…

    JavaScript 2023年5月28日
    00
  • JS使用window.requestAnimationFrame()对列表切片进行渲染

    当需要对一个大型列表进行渲染时,最好使用requestAnimationFrame()代替setTimeout()或setInterval(),因为requestAnimationFrame()会在每一帧结束后更新状态,这比定时器更精确地匹配帧率并避免过多的重绘。 以下是使用window.requestAnimationFrame()对列表切片进行渲染的攻略…

    JavaScript 2023年6月11日
    00
  • ES6知识点整理之String字符串新增常用方法示例

    ES6知识点整理之String字符串新增常用方法示例 1. 介绍 ES6中为字符串提供了很多实用的新增方法,包括模板字符串、startsWith()、endsWith()、repeat()、includes()等。这些方法极大地方便了字符串常用操作的实现。 2. String.raw String.raw 方法用于获取一个模板字符串的原始字符串形式,忽略所有…

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