Javascript对象:属性中的函数或方法

时间:2011-12-09 09:13:59

标签: javascript object methods attributes

我试图将方法的结果放在属性中,但我一直收到错误:“未捕获TypeError:对象[对象DOMWindow]没有方法'ppp'”

这是我的简单代码:

var ttt = {
    ddd: 'I said '+ this.ppp() + '!!!',


    ppp:function(){
        return 'ok';
    }
};
alert(ttt.ddd)

感谢你的帮助:)

3 个答案:

答案 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/