更改上下文方法(更改this指向的内容,可方便地实现继承) call()、apply()
创建call_apply.js文件,代码如下
// 声明一个pet对象
var pet = {
words: '...',
// 声明一个speak方法
speak: function(say){
console.log(say + ' ' + this.words);
console.log(this);
}
}
// 调用pet中的speak方法
pet.speak('Speak');
以上代码执行结果如下:
$ node call_apply.js
Speak ...
{ words: '...', speak: [Function] }
- 使用call改变上下文方式一
创建call_apply.js文件,使用call 改变上下文,代码如下
// 声明一个pet对象
var pet = {
words: '...',
// 声明一个speak方法
speak: function(say){
console.log(say + ' ' + this.words);
console.log(this);
}
}
// 调用pet中的speak方法
// pet.speak('Speak');
// 声明一个dog对象
var dog = {
words: 'Wang'
}
// 将pet.speak的this指向了dog,改变了执行上下文
pet.speak.call(dog,'Speak');
以上代码执行结果如下:
$ node call_apply.js
Speak Wang
{ words: 'Wang' }
- 使用call改变上下文方式二
创建call_apply_extend.js文件,使用call 改变上下文,代码如下
// 声明一个pet函数
function Pet(words){
// 将words赋值给this.words属性
this.words = words;
// 声明一个speak方法
this.speak = function(){
// 调用this中的this.words
console.log(this.words);
console.log('Pet:' , this);
}
}
// 声明一个Dog方法
function Dog(words){
// 将Pet的this指向了Dog
// Dog中并没有speak方法,通过call方法将Pet中speak方法指向了Dog中,使Dog也能够调用speak方法
Pet.call(this,words);
console.log('Dog:' , this);
// Pet.apply(this,arguments);
}
// 创建一个实例对象
var dog = new Dog('Wang');
// 调用speak方法
dog.speak();
以上代码执行结果如下:
$ node call_apply_extend.js
Dog: Dog { words: 'Wang', speak: [Function] }
Wang
Pet: Dog { words: 'Wang', speak: [Function] }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦