蓝色雨点 2018-01-01 06:42 采纳率: 100%
浏览 1069
已采纳

通过javascript执行链获取上下文对象

废话不多说, 直接上代码

(function(model){
    model.m1.init();
})({
    get m1(){
        var
            obj = {},
            _ctxt = this;
        // 1. 传递上下文对象
        return util.model.cache(obj, _ctxt);
    }
});

// util.js

var util = {
    model: {
        cache: function (m, c, refresh, key) {
            // 这里上下文默认为 this 明显是有问题的
            // 也就是说每次调用 cache() 必须传递 c 参数
            // 2. 是否有更好的办法解决这个问题?
            c = c || this;
            var
                name = arguments.callee.caller.name,
                names = /\s/.test(name) ? name.match(/ (\S*)/) : [name],
                k = jstAPI.valid.isString(key) ? key : ("_" + (1 === names.length ? names[0] : names[1])),
                v = c[k];
            if (refresh || null === v || undefined === v) {
                v = jstAPI.common.invoke(c,m)||m;
                if (jstAPI.valid.isObject(v))
                    v._ctxt = c;
                c[k] = v;
            }
            return v;
        }
    }
};

想在 utils.model.cache 函数中获取**m1()**所在的上下文,
这里为 model 所指的对象,
通过 arguments.callee.caller 只能获取到m1() 这个函数,
如何获取 model 所指向的对象呢?

  • 写回答

7条回答 默认 最新

  • devmiao 2018-01-01 15:52
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题