Men的博客

欢迎光临!

0%

手写实现 JavaScript 中的 call 方法

步骤:

创建一个新的函数对象,作为 call 方法的实现。

在新的函数对象中,将传入的第一个参数作为要调用的函数,将其保存在一个变量中。

使用 arguments 对象获取传入的参数列表,并将其转换为数组。

使用 apply 方法调用保存的函数,并传入第一个参数作为上下文对象(即函数中的 this 值),以及转换后的参数数组。

返回调用结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function.prototype.myCall = function (context, ...args) {
// 判断是否传入了上下文对象,如果没有,则使用全局对象(浏览器中为 window)
context = context || window;

// 将当前函数保存在变量中
const fn = Symbol('fn');
context[fn] = this;

// 使用 apply 方法调用函数,并传入上下文对象和参数数组
const result = context[fn](...args);

// 删除临时保存的函数
delete context[fn];

// 返回调用结果
return result;
};

// 示例用法
const person = {
name: 'John',
greet: function(message) {
console.log(`${message}, ${this.name}!`);
}
};

const otherPerson = {
name: 'Jane'
};

person.greet.myCall(otherPerson, 'Hello');
// 输出:Hello, Jane!

在 JavaScript 中,Symbol 是一种特殊的数据类型,用于创建唯一的标识符。它可以用于优化对象属性的访问和避免命名冲突。

nextTick

是 Vue.js 提供的一个方法,用于在下次 DOM 更新循环结束之后执行延迟回调函数。它的主要作用是在 Vue 更新 DOM 后,对 DOM 进行操作或获取最新的 DOM 数据。
从 Vue 3.0 开始,nextTick 方法已被废弃,取而代之的是 nextTick 函数返回的 Promise 对象。可以使用 await this.$nextTick() 来等待 DOM 更新完成。

Vue 过滤器(Filters)

是一种用于格式化文本输出的功能。它可以在模板中对数据进行处理,并将处理后的结果显示给用户。过滤器可以用于格式化日期、数字、文本等各种类型的数据。
可以通过在插值表达式或指令中使用 | 符号将数据和过滤器名称分隔开。
Vue 3.0 中的过滤器已被废弃,取而代之的是更强大的自定义函数和计算属性。因此,在使用 Vue 3.0 或更高版本时,推荐使用计算属性或方法来替代过滤器的功能。

Vue 自定义指令

(Custom Directives)是一种扩展 Vue.js 模板语法的方式

1
2
3
4
5
6
7
8
9
10
Vue.directive('directiveName', {
// 钩子函数
bind: function(el, binding, vnode) {
// 指令绑定时的逻辑
},
inserted: function(el, binding, vnode) {
// 元素插入到父节点时的逻辑
},
// 其他钩子函数...
});

钩子函数:
自定义指令可以定义多个钩子函数,用于在不同的生命周期阶段执行相应的逻辑。常用的钩子函数包括:

bind:指令第一次绑定到元素时调用,可以在这里进行初始化设置。
inserted:元素插入到父节点时调用,可以在这里进行 DOM 操作。
update:元素所在组件的 VNode 更新时调用,可以在这里对指令的参数进行更新。
componentUpdated:元素所在组件的 VNode 及其子 VNode 更新时调用。
unbind:指令与元素解绑时调用,可以在这里进行清理工作。

钩子函数接收三个参数:

el:指令所绑定的元素。
binding:一个对象,包含指令的信息,如指令的值、参数、修饰符等。
vnode:Vue 编译生成的虚拟节点。

vue组件和插件的具体区别

组件(Component):
组件是 Vue 中用于构建用户界面的基本单元。它是一个可复用的、自包含的模块,包含了 HTML 模板、CSS 样式和 JavaScript 逻辑。组件可以封装特定的功能和交互,并通过 props 和 events 进行数据传递和通信。
插件(Plugin):
插件是一种扩展 Vue 功能的方式,用于添加全局功能或在多个组件中共享功能。插件可以添加全局方法、指令、过滤器、混入等,以及在 Vue 实例化之前对 Vue 进行全局配置。

跨域的几种方式

JSONP(JSON with Padding):
JSONP 是一种利用