来自对象的函数调用的范围问题

时间:2014-04-07 11:52:06

标签: javascript jquery

我需要通过fc.messages.max.call(this)执行fc.text-function;

但我确实有错误:TypeError:fc未定义。

纯fc.text-function有效。

我需要对范围处理进行一些解释。

以下是Fiddle

这是我的代码

var fc = {

        methods: { },

        test: function(whatever) {
              console.log("test:", whatever);
            },
        messages: {
            tata: "hello", 
            max: fc.test("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),
            min: fc.test("Geben Sie bitte einen Wert größer oder gleich {0} ein."),
        },

        otherTest: function() {
                console.log("otherTest works"); 
                fc.test("otherTest");     
                }

   };

fc.test("hello world"); //works
fc.otherTest();         //works also

//fc.messages.max.call( this );

我该如何解决这个问题?

我做了另一个jsfiddle工作正常。但功能在不同的范围内。 one more fiddle

有任何解释吗?

3 个答案:

答案 0 :(得分:1)

call()方法是Function object的属性。

fc.messages.max不是一个功能。它的值是fc.test()的返回值,即undefined

答案 1 :(得分:1)

来自mdn docs

  

call()方法调用函数,并且给定此值和参数单独提供。

min: & max:不是函数,因此您无法call()

什么叫什么:

var test = function( t ) {
    console.log("one more test: ",t);
};
var fc = {

    methods: { },

    test: function(whatever) {
        console.log("test:", whatever);
    },
    messages: {
        tata: "hello", 
        max: function() { test("var test") },
        min: function() { fc.test("fc test") }
    },

    otherTest: function() {
        console.log("otherTest works"); 
        fc.test("otherTest");     
    }

};

fc.test("fc test, hello world"); //calls fc.test
test("var test, hello world"); // calls var test
// fc.otherTest();         //works also

fc.messages.max.call( this ); // call var test
fc.messages.min.call( this ); // calls fc.test

http://jsfiddle.net/v7xT6/7/

答案 2 :(得分:0)

我不确定,但我认为您无法访问fc.test(),因为messages fc尚未完成。

比较

var f = { a: function () { return 1; }, max: f.a() }
> TypeError: Cannot call method 'a' of undefined

它说f未定义。

在分配(f)完成并定义var f之前,您无法访问f