javascript中“this”的奇数值

时间:2013-08-20 15:18:54

标签: javascript dojo this

在下面的代码中,根据firebug获取值[function()],而不是define返回的对象。


define(["dojo/dom", 
        "dojo/dom-construct", 
                ......., 
        "dojo/domReady!"], 

function(dom, 
         construct, 
         ........){ 

    return { 

        is_empty_attr: function(attr){ 
            if (attr.many){ 
                return attr.peeks.length === 0; 
            } else { 
                return !attr.peeks; 
            } 
        }, 
                ................ 

        add_button: function(attr){ 
            console.log(this); <- 1
            var self = this; 
            return new Button({ 
                label: 'add', 
                showLabel: false, 
                iconClass: "add_icon", 
                disabled: this.is_empty_attr(attr), <- 2
                onClick: function(){ 
                    if (attr.inline){ 
                        ajax.newObject(self.sub_path_func(attr), function(json){ 
                            self.object_table(json, "val_"+attr.path); 
                        }); 
                    } else { 
                        ajax.newObject(self.sub_path_func(attr), function(json){ 
                            self.object_dialog(json); 
                        }); 
                    } 
                } 
            }); 
        }, 

    };     
}); 

行(&lt; -1)记录“[function()]” line(&lt; -2)因此给出了未定义的函数错误。

有谁知道为什么会发生这种情况以及如何解决这个问题?

[编辑]我已经解决了问题(通过猜测),但在原始版本中,我将数组[this.add_button,this.someotherbutton]传递给另一个函数,该函数使用attr参数调用数组中的每个函数。所有方法都是dojo定义方法的同一返回对象的一部分。它通过[this.add_button(attr),this.someotherbutton(attr)](所以实际按钮)作为第二个函数的参数后工作。

我仍然不明白这是如何改变add_button中的“this”值的,因为调用add_button的两个方法看起来都是可比较的,所以如果有人能解释我会很感激。[end edit]

干杯,拉尔斯

1 个答案:

答案 0 :(得分:1)

使用dojo/_base/declare定义您的课程:

define(["dojo/_base/declare",
        "dojo/dom", 
        "dojo/dom-construct", 
            ......., 
        "dojo/domReady!"], 

function(declare,
         dom, 
         construct, 
         ........){ 

    return declare([], {
        is_empty_attr: function(attr){ 
            ...
        },
        add_button: function(attr){
            ...
        }
    });
});