为了账号安全,请及时绑定邮箱和手机立即绑定

更改上下文方法(更改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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消