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

Javascript Object: a function or method in an attribute

本文关键字:函数 方法 对象 属性 Javascript      更新时间:2023-09-26

我是一个试图把一个方法的结果在一个属性,但我不断得到错误:"Uncaught TypeError: Object [Object DOMWindow]没有方法'ppp'"

这是我的简单代码:

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

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

谢谢你的帮助

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

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

这是好的。你写的代码。DDD是一个字符串,'this'是浏览器中的窗口对象

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()this部分将在函数内部查找ppp

关于作用域和闭包的更多信息…http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

问题是,在你的代码'this'是指窗口对象。

为了解决这个问题,你可以把ttt变成一个自动执行的函数

var ttt = function() {
function ppp(){
     return 'ok'   
}
return {
    ddd: 'I said '+ ppp() + '!!!',
    ppp: ppp
}
}();
此时,您仍然可以使用原始代码来提醒ddd
alert(ttt.ddd)

点击http://jsfiddle.net/aCeqt/