this在对象的函数内使用关键字可以正常工作,但是在没有的情况下引用其他函数this.当我在对象之前放出这些函数时,两种方式都有效.为什么会这样?
var Obj = {
func1: function () {
console.log(this.func2()); // works
console.log(func2()); // doesn't work
},
func2: function () {
return 5;
}
};
Obj.func1();
Run Code Online (Sandbox Code Playgroud)
但在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();
Run Code Online (Sandbox Code Playgroud)
这与IIFE无关,在第一个例子中,你有一个对象文字,在第二个常规函数中.
当然,对象文字需要对象的名称(或者this如果this-value 是对象,就像在对象文字内),后跟属性来访问它,而命名函数只需要使用就可以在该范围内的任何地方访问名字.
var obj = {
prop : function() {...}
}
prop(); // fail ... undefined
obj.prop(); // works
// then _______________________________________________________________
function prop() {...}
prop(); // works fine
Run Code Online (Sandbox Code Playgroud)
这正是你正在做的事情,你只是将它包装在不同的对象中并立即调用函数表达式,所以它看起来有点相同,但事实并非如此.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |