Javascript This 上下文
2020-09-09 10:29 更新
我们可以更改此值以指向不同的上下文。
有三个函数方法可以改变这个的值。
call()方法
call()
函数可以通过运行来更改 this
上下文该函数具有特定的 this
值和特定参数。
call()
的第一个参数是 this
应该指向的值到该函数被执行时。
所有后续参数都是应传递到函数中的参数。
例如,假设您更新writeLineForAll()以接受一个参数:
function writeLineForAll(label) { /*from www.w3cschool.cn */
console.log(label + ":" + this.name);
}
var book1 = {
name : "Javascript"
};
var book2 = {
name : "CSS"
};
var name = "W3Cschool";
writeLineForAll.call(this, "global");
writeLineForAll.call(book1, "book1");
writeLineForAll.call(book2, "book2");
上面的代码生成以下结果。
第一个函数调用使用全局变量,并在参数“global"中传递。
通过使用call()方法,我们不需要直接将函数添加到每个对象上。
apply()方法
apply()
方法与call()相同,但它只接受两个参数:this的值和数组或类数组的对象参数传递给函数。
我们可以使用arguments对象作为第二个参数apply()方法。
function writeLineForAll(label) { //www.w3cschool.cn
console.log(label + ":" + this.name);
}
var book1 = {
name : "Javascript"
};
var book2 = {
name : "CSS"
};
var name = "W3Cschool";
writeLineForAll.apply(this, ["global"]);
writeLineForAll.apply(book1, ["book1"]);
writeLineForAll.apply(book2, ["book2"]);
上面的代码生成以下结果。
bind()
的第一个参数是新函数的 this
值。
所有其他参数表示应该是的命名参数在新功能中设置。
以下代码显示了使用bind()的两个示例。
我们通过将this值绑定到book1来创建writeLineForPerson1()函数writeLineForPerson2()将此绑定到book2并将第一个参数绑定为“book2"。
function writeLineForAll(label) { /* www.w3cschool.cn*/
console.log(label + ":" + this.name);
}
var book1 = {
name : "Javascript"
};
var book2 = {
name : "CSS"
};
// create a function just for book1
var writeLineForPerson1 = writeLineForAll.bind(book1);
writeLineForPerson1("book1");
// create a function just for book2
var writeLineForPerson2 = writeLineForAll.bind(book2, "book2");
writeLineForPerson2();
// attaching a method to an object doesn"t change "this"
book2.writeLine = writeLineForPerson1;
book2.writeLine("book2");
上面的代码生成以下结果。
以上内容是否对您有帮助:
更多建议: