我试图将方法的结果放在属性中,但我一直收到错误:“未捕获TypeError:对象[对象DOMWindow]没有方法'ppp'”
这是我的简单代码:
var ttt = {
ddd: 'I said '+ this.ppp() + '!!!',
ppp:function(){
return 'ok';
}
};
alert(ttt.ddd)
感谢你的帮助:)
答案 0 :(得分:2)
var ttt = {
ddd:function(){
return 'I said '+ this.ppp() + '!!!';
},
ppp:function(){
return 'ok';
}
};
alert(ttt.ddd())
这没关系。你编写的代码,ttt.ddd是一个字符串,'this'是浏览器中的窗口对象。
答案 1 :(得分:1)
问题在于你的代码'this'指的是窗口对象。
为了解决这个问题,您可以将ttt变为自动执行功能
即
var ttt = function() {
function ppp(){
return 'ok'
}
return {
ddd: 'I said '+ ppp() + '!!!',
ppp: ppp
}
}();
此时您仍然可以使用原始代码提醒ddd
alert(ttt.ddd)
要查看此操作,请转到http://jsfiddle.net/aCeqt/
答案 2 :(得分:1)
javascript中没有块范围(只有函数范围),所以 this.ppp()指的是全局范围(这意味着它将在 ppp的窗口对象上查找),因为它不在函数内部。
您可以按如下方式重写:
var ttt = (function () {
var innerttt = {
ddd: function () {
return 'I said ' + this.ppp() + '!!!';
},
ppp: function(){
return 'ok';
}
};
return innerttt;
})();
alert(ttt.ddd())
这将为 ddd 提供调用 ppp 所需的范围..这意味着 this.ppp的此部分( )将查看 ppp
的功能有关范围和闭包的更多信息.. http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/