私は自分のケーキを持って食べたい: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`