call和apply的使用
2020-04-17 本文已影响0人
此人已失联好几天
call // 传参方式按照实参位数传进去:fn.call(this, arg1, arg2, ....)
apply // 传参方式按照arguments数组方式传进去:fn.apply(this, [arg1, arg2, ....])
实例:
function Index(name, e) {
// 使用call调用Index函数,此时this指向调用该函数的对象:this === Module
this.name = name;
this.e = e;
}
function Path(dirName, fileName) {
// 使用call调用Path函数,此时this指向调用该函数的对象:this === Module
this.dirName = dirName;
this.fileName = fileName;
}
function Url(hostName, port) {
// 使用call调用Url函数,此时this指向调用该函数的对象:this === Module
this.hostName = hostName;
this.port = port;
}
function Module() {
// 组装车间,所有的零件全部来源于其他车间,当前车间只负责组装并输出
// call的第一个参数永远是this指向的目标
// 如果属性重复,则调用时的顺序由下而上覆盖 -> 比如:Path中有fileName属性,Url中也有fileName属性,则Url覆盖Path中的fileName属性
Index.call(this, 'index', 'html');
Path.call(this, 'cs-node', 'index.html');
Url.call(this, 'localhost', 8080)
}
let module = new Module();
// 打印module对象
console.log(module);
/*
Module {
dirName: "cs-node",
e: "html",
fileName: "index.html",
hostName: "localhost",
name: "index",
port: 8080
}
*/
image.png