@hotlp
2017-11-09T10:23:57.000000Z
字数 762
阅读 958
未分类
用的不多,但总得知道这么个东西,偶尔会发现还是很有用。
1.call和apply本质没有区别,只是传参不同,第二个参数
obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]);
2.作用 call和apply可以动态改变this,当一个obj1没有某个方法,而obj2有,又不想重新给obj1写,那我们可以借助call或apply用obj2的方法来操作,如:
function Ninjia(name, size, weapon) {this.name = name;this.weapon = weapon;this.size = size;}Ninjia.prototype.sayHello = function() {console.log(this.name + '拿起了他' + this.size + '厘米的' + this.weapon + '冲你来了一发');}var ninjia = new Ninjia('Mike', '18','烧火棍');function Boxer(name, size, weapon) {this.name = name;this.weapon = weapon;this.size = size;}var boxer = new Boxer('Bob','20', 'boxing glove');// ninjia.sayHello.call(boxer);function SwordMan(name, size, weapon) {Ninjia.call(this, name, size, weapon);Ninjia.prototype.sayHello.call(this);}var swordman = new SwordMan('sam','50','sword');