我也想吃蛋糕:我想有一个方法,this
当它绑定到一个对象时返回链接,但undefined
在使用 null|undefined 范围调用它时返回。这似乎工作正常,但如果你把它放到JSLint 中,那么你会得到一个 Strict Violation 错误。我不需要使用严格模式,但似乎这应该是可能的并且它有效(打开控制台)。这可以吗和/或你怎么能达到这个效果?
var o = {}; // or some pre-existing module
o.meth = (function (undefined) {
// contrived example where you'd want to be able to locally
// access `meth` even if the outer `o.meth` was overwritten
'use strict';
var hash = Object.create(null); // "object" with no properties
// global ref - or `null` where strict mode works
var cantTouchThis = (function () {
return this;
}).call(null);
function meth (k, v) {
var n;
if (typeof k == 'object') { // set multi
for (n in k) {
meth(n, k[n]);
}
} else {
if (v === undefined) { return hash[k]; } // get
hash[k] = v; // set
}
if (this == cantTouchThis) { return; }
return this;
}
return meth;
}());
如果您查看控制台:
var localM = o.meth; // now scopeless
console.log( o.meth('key', 'val') ); // should return `o`
console.log( localM('key', 'val') ); // should return `undefined`