Gozs_cs_dn
蓝色雨点
2018-01-01 06:42

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

5
  • 对象
  • 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条回答

为你推荐