在页面调用时立即调用该函数

时间:2011-08-01 16:14:56

标签: javascript

var ObjectLiteral = {
    myName:function() {
    }
}
  1. 我希望在页面播放时立即调用myName函数 加载。
  2. 我不太热衷于在一个内部编写一个自我调用函数 ObjectLiteral ...

4 个答案:

答案 0 :(得分:5)

在同时调用函数时不能分配函数(因为调用它意味着它的返回值被赋值)。你必须分两步完成这个任务。

var ObjectLiteral = {
    myName:function() {
    }
};
ObjectLiteral.myName();

答案 1 :(得分:1)

仅仅是因为没有人提到它:

var ObjectLiteral = {
    myName: function() {
        console.log('myName was called!');
        return arguments.callee;
    }()
}

由于ES5中不推荐arguments.callee,我们需要为该方法命名:

var ObjectLiteral = {
    myName: function _myName() {
        console.log('myName was called!');
        return _myName;
    }()
}

<击>完成。该方法将在页面加载时调用,并且稍后仍可调用。这样做的警告是this上下文值,它在自执行方法上被windowundefined(严格)替换。但你可以运用一些魔法来解决这个问题。例如,在es3中调用.call(ObjectLiteral)或在es5中调用.bind(ObjectLiteral)

var ObjectLiteral = {
    myName: function _myName() {
        console.log('myName was called!');
        return _myName;
    }.call(ObjectLiteral)
}

看起来我错了(该死的!)。这个想法没问题,但ObjectLiteral的第一次调用没有完成对myName的分配。因此,上面的代码只会在第二次调用时运行,这当然会使它无用。你需要调用另一个上下文,但那只是矫枉过正。

它毕竟仍然有用,但是如果你需要访问this它会搞砸,否则我认为这是一个很好的解决方案。

答案 2 :(得分:0)

关于你的第一个问题:

最简单的答案是将此行添加到您的脚本中:

window.onload = ObjectLiteral.myName();

更好的答案是在分配给window.onload的较大函数中的某处包含该行:

window.onload = function () {
    ....
    ObjectLiteral.myName();
}

更好的答案是在重新分配window的情况下正确调整范围。

对于第二个问题,你自称是什么意思? (编辑:n / m,昆汀回答)

答案 3 :(得分:0)

考虑到你想在页面加载后执行代码,jQuery非常适合:

$(function() {
  // called then page loaded..
  var ObjectLiteral = {
    myName:function() {
    }
  };

  ObjectLiteral.myName();

});