0
var abc = {
    'a': 10,
    'b': 10,
    c: function() {
        //like if I have many many functions in c
        init_a();
        multiple();

        function init_a() {
            abc.a = 30;
        }

        function multiple() {
            alert(abc.a * abc.b);
        }

        function minus() {
            alert(abc.a - abc.b);
        }
        return {
            function myalert() {
                var result = abc.a + abc.b;
                alert(result);
            }
        }
    },
    d: function() {
        abc.c.myalert(); // ???  error??
        abc.c().myalert(); // ??? error??  **it run all functions in c but not just myalert, strange things happening...
    }

}
abc.d();

在函数 d 中调用“myalert()”函数的正确语法是什么?

4

3 回答 3

6

myalert()功能本地的abc.c(),所以这是不可能的。

你可以让c()返回myalert()

c: function() {
    return function myalert() {
      // whatever
    }
}, d: function() {
    this.c()()
}

请注意,返回的函数不必命名,即return function() { .. }.

更新

如果你想调用它this.c().myalert(),那么c()需要直接返回一个对象而不是函数:

c: function() {
    return {
        myalert: function() { ... }
    }
}

更新 2

您的c()函数现在包含除了声明之外的其他语句myalert()。被调用时,init_a()multiple()在它返回之前被调用。

我建议重构您的代码,例如,myalert()改为移入主对象:

var abc = {
    a: 10,
    b: 10,
    c: function() { ... }
    myalert: function() { ... }
    d: function() {
        this.myalert();
    }
}
于 2012-12-03T11:54:09.827 回答
2

您可以从中返回一个对象,c其中包含myalert

var abc = {
    'c': function() {
        return {
            myalert: function() {
                alert('foo');
            }
        };
    },
    'd': function(){
        abc.c().myalert(); // foo
    }
};
abc.d();​

演示:http: //jsfiddle.net/g2KEK/

于 2012-12-03T11:56:00.383 回答
0
c: function() {
    return {
        myalert : function() {
            // whatever
        }
    }
}, d: function() {
    this.c().myalert()
}
于 2012-12-03T12:00:31.697 回答