JavaScript 进阶第六章(this与函数的调用模式 )

简介: JavaScript 进阶第六章(this与函数的调用模式 )

根据函数内部this的指向不同,可以将函数的调用模式分成4种


  1. 函数调用模式


  1. 方法调用模式


  1. 构造函数调用模式


  1. 上下文调用模式(借用方法模式)


函数调用模式


如果一个函数不是一个对象的属性时,就是被当做一个函数来进行调用的。此时this指向了window


function fn(){
  console.log(this); // 指向window 
}
fn();


方法调用模式


当一个函数被保存为对象的一个属性时,我们称之为一个方法。当一个方法被调用时,this被绑定到当前对象

const obj = {
  sayHi:function(){
    console.log(this); // 在方法调用模式中,this指向调用当前方法的对象。
  }
}
obj.sayHi();


构造函数调用模式


如果函数是通过new关键字进行调用的,此时this被绑定到创建出来的新对象上。


function Person(){
  console.log(this);
}
Person(); // 指向window 
var p = new Person(); // this指向Person


上下文调用模式


也叫上下文模式,分为 apply 与 call


call


call方法可以调用一个函数,并且可以指定这个函数的this指向


  const RichWumon = {
      name: "海海",
      say: function () {
        console.log(this.name, " 你好呀");
      }
    }
    const obj = {
      name: "小陈"
    }
    RichWumon.say();            // 海海
    RichWumon.say.call(obj);    // 小陈

 

call应用


将伪数组转成数组

let divs = document.querySelectorAll('div');
    console.log(divs);
    function change(nodelist) {
        console.log(Object.prototype.toString.call(nodelist));
        return Array.prototype.slice.call(nodelist);
    }


apply


就是apply()方法接受的是一个包含多个参数的数组。而call()方法接受的是若干个参数的列表


    const RichWumon = {
      name: "海海",
      say: function () {
        console.log(this.name, "你好呀");
      }
    }
    const obj = {
      name: "小陈"
    }
    RichWumon.say();      // 海海
    RichWumon.say.apply(obj); // 小陈

 

apply应用


1.简化 console.log方法


// 简化log方法
    function log() {
        console.log.apply(console, arguments);
    }


bind方法


bind()方法创建一个新的函数, 可以绑定新的函数的this指向


var name = '海海';
function Fn(){
    this.age = 18;
    console.log(this.name + this.age);
}
Fn();     // 海海 18
// 返回值:新的函数
// 参数:新函数的this指向,当绑定了新函数的this指向后,无论使用何种调用模式,this都不会改变。
let obj = {
    name:'小陈',
}
const newFn = Fn.bind(obj);
newFn();    // 小陈 18


this的指向


单独使用,this 指向全局对象


console.log(this); // window


函数中的 this 指向全局对象  


function show(){
      console.log(this);  // window
    }
    show();


在函数内部,this 的指向在函数定义的时候是不能确定的,只有函数执行的时候才能确定  


const a = 18;
    const obj = {
      a: 19,
      b: {
        a: 20,
        c: function () {
          console.log(this.a);  // 20
        }
      }
    }
    obj.b.c();


在方法中,this 指代该调用方法的对象  


const obj ={
    name:"海海",
    say:function(){
        console.log(this);        // {name:"海海"}
    }
}


箭头函数中的this指向


箭头函数自己没有this

箭头函数的this是确定的,且不变

箭头函数中的this指向  创建这个箭头函数所在对象 的上下文  


相关文章
|
5月前
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
251 19
|
7月前
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
9月前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
960 44
|
9月前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
210 32
|
8月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
398 0
Next.js 实战 (三):优雅的实现暗黑主题模式
|
前端开发 JavaScript UED
探索JavaScript的异步编程模式
【10月更文挑战第40天】在JavaScript的世界里,异步编程是一道不可或缺的风景线。它允许我们在等待慢速操作(如网络请求)完成时继续执行其他任务,极大地提高了程序的性能和用户体验。本文将深入浅出地探讨Promise、async/await等异步编程技术,通过生动的比喻和实际代码示例,带你领略JavaScript异步编程的魅力所在。
115 1
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
前端开发 JavaScript UED
探索JavaScript中的异步编程模式
【10月更文挑战第21天】在数字时代的浪潮中,JavaScript作为一门动态的、解释型的编程语言,以其卓越的灵活性和强大的功能在Web开发领域扮演着举足轻重的角色。本篇文章旨在深入探讨JavaScript中的异步编程模式,揭示其背后的原理和实践方法。通过分析回调函数、Promise对象以及async/await语法糖等关键技术点,我们将一同揭开JavaScript异步编程的神秘面纱,领略其带来的非阻塞I/O操作的魅力。让我们跟随代码的步伐,开启一场关于时间、性能与用户体验的奇妙之旅。
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。

热门文章

最新文章

下一篇
oss云网关配置