废话不多说, 直接上代码
(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 所指向的对象呢?