call和apply的使用

2020-04-17  本文已影响0人  此人已失联好几天
call // 传参方式按照实参位数传进去:fn.call(this, arg1, arg2, ....)
apply // 传参方式按照arguments数组方式传进去:fn.apply(this, [arg1, arg2, ....])

实例:

        function Index(name, e) {
            // 使用call调用Index函数,此时this指向调用该函数的对象:this === Module
            this.name = name;
            this.e = e;
        }

        function Path(dirName, fileName) {
            // 使用call调用Path函数,此时this指向调用该函数的对象:this === Module
            this.dirName = dirName;
            this.fileName = fileName;
        }

        function Url(hostName, port) {
            // 使用call调用Url函数,此时this指向调用该函数的对象:this === Module
            this.hostName = hostName;
            this.port = port;
        }

        function Module() {
            // 组装车间,所有的零件全部来源于其他车间,当前车间只负责组装并输出
            // call的第一个参数永远是this指向的目标
            // 如果属性重复,则调用时的顺序由下而上覆盖 -> 比如:Path中有fileName属性,Url中也有fileName属性,则Url覆盖Path中的fileName属性
            Index.call(this, 'index', 'html');
            Path.call(this, 'cs-node', 'index.html');
            Url.call(this, 'localhost', 8080)
        }

        let module = new Module();
        // 打印module对象
        console.log(module);
        /* 
          Module {
              dirName: "cs-node",
              e: "html",
              fileName: "index.html",
              hostName: "localhost",
              name: "index",
              port: 8080
          }
        */
image.png
上一篇 下一篇

猜你喜欢

热点阅读