关于this的问题

关于this的问题

function Student() {
   var privateStore = {

   }
   function _set(key,value) {
       privateStore[key] = value;
       return this
   }
   function _get() {
       return privateStore.name + privateStore.age + privateStore.sex;
   }
   this.get = function () {
       return _get();
   }
   this.set = function (key,value) {
       return _set.call(key,value);
   }
}
var student = new Student();
student.set('name','小明').set('age',18).set('sex','男')
console.log(student.get());  


为什么不能链式调用set,_set里面返回的this指向谁?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,对于你的问题解答如下:

  1. 同学粘贴的代码中,在set方法中使用call方法,第一个参数改变了_set方法中的this指向,所以测试的结果确实指向传入key,默认转换成String对象(老师上一次回复中写成了字符串name不太严谨)。示例:

    http://img1.sycdn.imooc.com//climg/5f4b818409f97b2a11440777.jpg

    打印结果如下:

    http://img1.sycdn.imooc.com//climg/5f4b819109d4525305340187.jpg

    所以如果想要实现链式调用,可以参考老师第一次回答给出的解决方案,示例:

    http://img1.sycdn.imooc.com//climg/5f4b81e209be313105440257.jpg

  2. 回复中不可以粘贴图片,同学可以点击我要回答或者直接新建问题粘贴图片。

祝学习愉快~

好帮手慕慕子 2020-08-30 17:38:30

同学你好,可以打印下查看set和_set里面的this指向谁,示例:

http://img1.sycdn.imooc.com//climg/5f4b72bd092e68db13450746.jpg

打印结果如下:set中this指向Student实例化对象,_set中的this指向字符串name

http://img1.sycdn.imooc.com//climg/5f4b72cb0985e7e506360224.jpg

如果想要实现链式调用,可以在set方法中this传递给_set方法,示例:

http://img1.sycdn.imooc.com//climg/5f4b7387091d8c6e06950224.jpg

同学可以测试下,祝学习愉快~

  • 提问者 Nuyoah_星辰 #1
    不对啊,set里面的this指向的不是字符串'name',是window啊 还有我想问一下在问答里面怎么发截图
    2020-08-30 18:14:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师