我想只在定义了这个函数时调用一个函数。我在节点或浏览器控制台中尝试以下代码并开始工作。
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?
答案 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
作为结果。