下面是关于“JavaScript函数的四种调用模式”的完整攻略,分别是方法调用模式、函数调用模式、构造器调用模式和apply/call调用模式。
方法调用模式
当一个函数被定义为一个对象的属性时,该函数被称为一个方法。当使用对象的属性名调用该函数时,该函数内的this关键字将被绑定到该对象。
示例:
let obj = {
name: 'Tom',
sayHello: function() {
console.log(`Hello, my name is ${this.name}.`);
}
};
obj.sayHello(); // Hello, my name is Tom.
函数调用模式
当函数不被定义为一个对象的属性时,该函数被称为一个函数。通过函数名调用该函数时,该函数内的this关键字将被绑定到全局对象(在浏览器中就是window对象)。
示例:
function sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
let name = 'Tom';
sayHello(); // Hello, my name is undefined.
在上面的示例中,由于name变量在函数外定义,因此函数内无法访问到name变量的值。
构造器调用模式
当一个函数被使用new关键字调用时,该函数被称为一个构造器。在构造器内,一个新的对象将被创建,并将该对象的this关键字绑定到该新对象上。构造器的返回值是该新对象。
示例:
function Person(name) {
this.name = name;
this.sayHello = function() {
console.log(`Hello, my name is ${this.name}.`);
}
}
let tom = new Person('Tom');
tom.sayHello(); // Hello, my name is Tom.
在上面的示例中,我们定义了一个Person构造器。当使用new关键字调用Person时,一个新的Person对象将被创建,并将该对象的this关键字绑定到该新对象上。
apply/call调用模式
apply和call是JavaScript中的两个函数方法,它们可以用来设置函数内this关键字的值。
apply方法接受两个参数,第一个参数表示this的值,第二个参数是一个数组,数组中的元素作为该函数的参数传入。
call方法与apply类似,但是它的参数是单独传入的,而不是一个数组。
示例:
let obj1 = {
name: 'Tom'
};
let obj2 = {
name: 'Jerry'
};
function sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
sayHello.apply(obj1); // Hello, my name is Tom.
sayHello.call(obj2); // Hello, my name is Jerry.
在上面的示例中,我们使用了apply和call方法来调用函数sayHello,并且设置了函数内this关键字的值。
以上就是JavaScript函数的四种调用模式的详细讲解攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript函数的四种调用模式 - Python技术站