使用字符串名称在$(document).ready函数中调用javascript函数

时间:2016-04-22 09:09:27

标签: javascript jquery

我想只在定义了这个函数时调用一个函数。我在节点或浏览器控制台中尝试以下代码并开始工作。

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而不使用self?

3 个答案:

答案 0 :(得分:2)

this的值取决于它出现的函数的调用方式。

在你的第一个例子中,你在任何函数之外调用它,在第二个例子中,你在一个被称为就绪事件处理函数的函数中调用它。

您可以使用window代替this(在浏览器中)明确检查它是否是全局的。

答案 1 :(得分:1)

功能内部:

$( document ).ready(function() {
    console.log(this); // here this is the document
})

但如果你写得如下:

console.log(this); // this is window

$( document ).ready(function() {
    console.log(this); // here this is the document
})

为了更加清晰,您可以尝试以下方法:

console.log(this); // this is window
a = 10;
console.log(this.a); // 10

$( document ).ready(function() {
    console.log(this); // here this is the document
    console.log(this.a); // undefined because a is not defined on the document

    // but you could access the one defined on the `window`
    console.log(window.a); // 10  

    b = 10;
    console.log(this.b); // still undefined because `b` is not set on the document but is local to this function.

    this.c = 10;
    console.log(this.c); // 10 
})

答案 2 :(得分:1)

基本上self会指向window.self,如果您不覆盖它。

slurp = function() { console.log('slurp'); }

此处您尚未提及var/let/..定义方法,因此slurp将分配给window

所以这段代码是,

('slurp' in self && typeof(self['slurp']) == 'function')

等于

('slurp' in window.self && typeof(window.self['slurp']) == 'function').

另外window.self == window。因此,您获得true作为结果。