var ObjectLiteral = {
myName:function() {
}
}
答案 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
上下文值,它在自执行方法上被window
或undefined
(严格)替换。但你可以运用一些魔法来解决这个问题。例如,在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();
});