JavaScript函数、闭包、原型、面向对象学习笔记
这篇文章主要了JavaScript中的函数、闭包、原型以及面向对象的知识点。对于希望深入学习JavaScript的朋友来说,这是一份宝贵的学习笔记。
断言
在单元测试框架中,断言方法扮演着核心角色。此方法通常接收一个值和描述,用于判断测试是否通过。如果值计算结果为真,则断言通过,否则失败。结果通常通过标记“通过(pass)/失败(fail)”来记录。在JavaScript中,我们可以使用console.log来输出断言结果,使用不同的颜色标记不同的状态。
函数
JavaScript是一门函数式语言,函数是其中的第一型对象。这意味着函数可以像其他任何对象一样被使用。函数可以通过字面量创建,可以赋值给变量、数组或其他对象的属性,可以作为参数传递给其他函数,甚至可以作为函数的返回值。
在JavaScript中,变量的作用域开始于声明处,结束于函数末尾,与代码嵌套无关。命名函数的作用域是整个函数范围,与代码嵌套无关。所有的函数调用都会传递两个隐式参数:argument和this。
作为函数进行调用
如果一个函数不是作为方法、构造器或通过apply()或call()进行调用的,那么它就被认为是作为函数进行调用的。在这种情况下,函数的上下文是全局上下文——window对象。
作为方法进行调用
当一个函数被赋值给对象的属性,并使用该属性进行调用时,该函数被视为该对象的方法。在这种情况下,该对象成为函数的上下文,可以在函数内部通过this参数访问。
作为构造器进行调用
要使用函数作为构造器进行调用,需要在函数调用前使用new关键字。这将会创建一个新的空对象,将对象传递给构造器作为this参数,并成为构造器的函数上下文。如果没有显式返回值,新创建的对象将作为构造器的返回值返回。
类Ninja构造器 {
constructor() {
this.skulk = () => {
return this;
}
}
}
创建两个Ninja实例:
let ninja1 = new Ninja();
let ninja2 = new Ninja();
理解构造器的主要目的是通过函数调用初始化创建新的对象实例。而函数调用的方式会影响到其上下文对象的选择。当函数作为方法调用时,其上下文是方法的拥有者;作为全局函数调用时,其上下文是window;而作为构造器调用时,其上下文是新创建的对象实例。我们还可以使用apply()和call()方法来选择任意对象作为函数上下文。接下来让我们这两个方法的使用以及函数的其他特性。
闭包中的秘密使者与私有变量
在编程的世界里,有一种神秘的力量叫做闭包。它如同一个深藏不露的忍者,守护着我们的私有领地。想象一下,你正在创建一个秘密的忍者世界,其中有许多忍者战士和他们的特殊技能。每个忍者都有自己的独特能力,这些能力被巧妙地隐藏在闭包之中。
让我们来看一个关于闭包和私有变量的场景。当你创建一个Ninja对象时,你可能有不想让外部直接访问的变量,比如“feints”。这个变量代表着忍者的特殊技能次数。我们希望只有在特定的函数内部才能访问和修改它。这就是闭包的魔力所在!它允许我们在函数内部创建私有变量,这些变量在函数外部是不可见的。就像忍者隐藏在黑暗中一样,只有内部函数能够接触到这些秘密。在这个例子中,"feints"这个变量就藏身在Ninja对象的闭包中。我们只能通过内部函数来访问和修改它。这就是闭包保护私有变量的神奇之处。每次调用"feint()"方法,"feints"都会增加一,就像在施展特殊技能一样。而在外部尝试访问"feints",却会得到undefined,就像被迷雾笼罩一样无法触及它的真实面貌。
再来说说原型与面向对象。当我们创建函数时,每个函数都有一个prototype属性,它就像一个连接着过去与未来的桥梁。当我们使用new操作符调用函数时,一个新的对象实例就在悄然诞生。这个对象继承了构造器函数的prototype属性上的属性和方法,从而继承了父类的一切特性。在这个过程中,构造器内的绑定操作优先级高于原型上的绑定操作。这是因为构造器的this上下文指向的是新创建的对象实例本身。我们可以在构造器内部对核心内容进行初始化操作,就像为新生的忍者战士赋予特殊技能一样。通过instanceof操作符,我们可以判断一个对象是否继承了某个原型链的功能,就像确认一个忍者是否掌握了某种特殊技能一样。
现在,让我们揭开最后的秘密——执行代码中的最后一步:"cambrian.render('body')"。这一刻,就像启动了一个神秘的仪式,将我们构建的忍者世界呈现在世人面前。闭包的神秘面纱下,隐藏着无尽的奥秘和力量。在这个世界中,每一个细节都被精心雕琢,每一个动作都充满魔法般的力量。这就是闭包与原型链共同构建的面向对象编程的世界,一个充满无限可能的奇幻世界!
网络推广网站
- JavaScript函数、闭包、原型、面向对象学习笔记
- 详解MySQL的主从复制、读写分离、备份恢复
- 戴安琳恩:她的生活态度值得我们去了解吗
- 杭州西湖十景的魅力有哪些 值得一游吗
- 激光刀模如何影响行业发展趋势 应用前景如何
- PHP跨时区(UTC时间)应用解决方案
- PHP实现视频文件上传完整实例
- vue数据传递--我有特殊的实现技巧
- 经典JavaScript正则表达式实战(附pdf)
- SQL Server中交叉联接的用法详解
- 你有必要知道的25个JavaScript面试题
- PHP随机数 C扩展随机数
- Vue+Webpack完美整合富文本编辑器TinyMce的方法
- php each 返回数组中当前的键值对并将数组指针向
- vue中使用vue-router切换页面时滚动条自动滚动到顶
- 基于Codeigniter框架实现的student信息系统站点动态