この関数が定義されている場合にのみ、関数を呼び出す必要があります。私は、ノードまたはブラウザのコンソールで次のコードを試してみると、その作業です。
slurp = function() { console.log('slurp'); }
slurp_callable = ('slurp' in this && typeof(this['slurp']) == 'function');
console.log('slurp is callable (this)?', slurp_callable);
if (slurp_callable) { this['slurp'](); }
しかし、私は(jqueryのを使用して)準備ができて、ドキュメントを待つ場合:
$(document).ready(function() {
console.log("ready!");
slurp = function() { console.log('slurp'); }
console.log('slurp is callable (this)?', ('slurp' in this && typeof(this['slurp']) == 'function')); //False
console.log('slurp is callable (self)?', ('slurp' in self && typeof(self['slurp']) == 'function')); //true
});
それは自分のために、このための偽と真の私を返します。
私は自己が私の以前のこの値であることを理解していますが、これはいつ変更されたのですか?
自己を使用せずに関数をチェックして$(document).readyにする方法はありますか?
はい、2番目の例では、準備完了イベントハンドラが呼び出されたときに呼び出される関数の内部でも関数slurpを定義していません。それは私が理解していないものです。現在、この機能にアクセスできない理由は何ですか? – Naremy
@Naremy - 2番目の例では、 'slurp'はグローバルで(' window.slurp'と同じですが) 'this'は' window'と同じではないので 'this.slurp'は' undefined'です。 – Quentin