蓝色雨点 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条)

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条