#apply(object,[])
-
每一个函数对象都有apply()方法
-
定义:
-
作用: 现有对象,函数a,函数b。a.apply(b,arguments):
1、b对象替代了a对象,并调用a对象的方法。
2、将当前指向函数a的上下文,指向函数b指定的上下文。
3、a对象继承了b对象,并调用了b对象的方法。
function add(c,d) {
return this.a + this.b + c + d;
};
const obj = {
a: 5,
b: 5
};
alert(add.apply(obj,[5,5])); //20
等价:
const o = {
a: 5,
b: 5,
add: function (c,d) {
return this.a + this.b + c + d;
}
}
alert(o.add(5,5)); //20
-
apply()最多只有两个参数apply(对象,数组)
-
无论参数有几个都必须写进数组
-
参数缺其一或其二时,global对象充当对象参数,且无法传参
#基本用法
一、跨对象调用方法:
function Tree() {
this.name = 'tree';
this.showName = function () {
console.log(this.name);
};
}
function Bamboo() {
this.name = 'bamboo';
}
let bamboo = new Bamboo();
let tree = new Tree();
tree.showName.apply(bamboo,[]);//tree的showName方法被bamboo调用
以上的代码等价于:
let Bamboo = {
name: "bamboo",
showName: function () {
console.log(this.name);
}
}
在对象Bamboo的基础之上增加了showName方法。对象bamboo替换了对象tree,并调用showName方法。
二、继承
function Tree(name) {
this.name = name;
this.showName = function () {
console.log(this.name);
};
}
function Bamboo(name) {
Tree.apply(this,[name]);
}
let bamboo = new Bamboo('bamboo');
bamboo.showName();
Tree.apply(this)意味着Tree对象替换掉了this对象,此时,Bamboo将继承Tree的方法和属性。
#call(Object,arg1,…,argN)
call方法与apply大同小异,只是第二参数上存在差异。