IIFE中对象和返回对象之间的区别

时间:2016-09-24 14:49:39

标签: javascript

在对象的函数内部使用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();

2 个答案:

答案 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来调用在对象下定义的函数。