老师我有一些疑问

老师我有一些疑问

1.

each(calculatorElem.btns, function (index, elem ) {

    elem.onclick = function () {

    updateSign(this.value);

    outputResult(operate(this.title, calculatorElem.formerInput.value, calculatorElem.laterInput.value));

    };

    });

var operate = (function () {

function operate(name, num1, num2) {

      if (!operation[name]) throw new Error('不存在名为' + name + '的运算方法!');

      return operation[name](num1, num2);

        }

})();

each函数中operate(this.title, calculatorElem.formerInput.value, calculatorElem.laterInput.value)的调用应该是调用的operate(这个是对象还是变量还是一个函数)里的operate函数吧,不明白为啥可以直接调用operate里面的operate,为什么不是operate.operate();

2.operate.addOperation = operation.addOperation;这样看来operate是一个对象吗,然后是创建一个新的属性addOperation用来存放operation.addOperation的地址吗,但是

operate.addOperation('mod', function (num1, num2) {

    return num1 % num2;

    })

调用的是一个方法,有点搞不清楚。关于this,operate.addOperation('mod', function (num1, num2)是不是此时传参的时候如果是this,那么将会在operate下创建新的运算函数,为了在operation下创建得把this改成operation,因为在

function operate(name, num1, num2) {

      if (!operation[name]) throw new Error('不存在名为' + name + '的运算方法!');

      return operation[name](num1, num2);

        }

里面用的是operation里面的函数,必须创建在operation里。老师你看我理解的this改为operation对吗。


正在回答

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

2回答

同学你好,可以参考下方的解释再理解下

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

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

console.dir()可以显示所有的属性和方法。

可以使用console.dir(),方法查看一下,控制台(是有addOperation这个方法的):

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

同学可以再理解下

如果还有其他疑问,建议在问答区重新提问,便于同学后期查找总结

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕言 2019-11-15 15:51:54

同学你好,关于同学的疑问,解答如下:

1、首先定义了一个函数,并赋值给了变量operate,之所以这样写:operate(this.title, calculatorElem.formerInput.value, calculatorElem.laterInput.value),是因为这个方法的返回值就是operate。

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

2、operate.addOperation中的operate是一个函数,可以打印一下:

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

控制台:

http://img1.sycdn.imooc.com//climg/5dce4e3c097a41d409250227.jpg其他地方是可以这样理解的,

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 小屁鹤 #1
    因为addOperation: function (name, fn)里返回operation是operation这个对象,我以为return operate返回的是定义的operate变量呢,从老师给的图片来看这里的operate应该是里面的operate函数吧,那这样的话我总觉着 operate.addOperation = operation.addOperation;里面的operate才是定义的那个变量呀,老师说这里的operate是个函数,那打印出来怎么没有addOperation,还是有些不懂
    2019-11-15 18:14:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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