在对象的函数内部使用this
关键字可以正常工作,但是在没有this
的情况下引用其他函数则不行。当我在对象之前放出这些函数时,两种方式都有效。为什么会这样?
var Obj = {
func1: function () {
console.log(this.func2()); // works
console.log(func2()); // doesn't work
},
func2: function () {
return 5;
}
};
Obj.func1();
但在IIFE做同样的事情:
var Obj = (function () {
function func1() {
console.log(this.func2()); // works
console.log(func2()); // works
}
function func2() {
return 5;
}
return {
func1: func1,
func2: func2
};
})();
Obj.func1();
答案 0 :(得分:5)
这与IIFE无关,在第一个例子中,你有一个对象文字,在第二个常规函数中。
当然,对象文字需要对象的名称(如果此值 对象,则需要this
,如对象文字内部)后跟属性访问它,而只需使用名称就可以在该范围内的任何地方访问命名函数。
var obj = {
prop : function() {...}
}
prop(); // fail ... undefined
obj.prop(); // works
// then _______________________________________________________________
function prop() {...}
prop(); // works fine
这就是你正在做的事情,你只是将它包装在不同的对象中并立即调用函数表达式,所以它看起来有点相同,但事实并非如此。
答案 1 :(得分:-1)
没有区别。
在这两种情况下,您都使用object
。因此,您需要使用this
或对象name
来调用在对象下定义的函数。