此变量中的Javascript构造函数返回错误

时间:2011-11-25 12:48:01

标签: literals javascript-objects javascript

我有一个函数,我按以下方式调用,但它返回someVariable.clean is not a function

以下是代码:

var someVariable = function() {
        this.clean = function(obj) {
            alert(obj);
        }
    }

    someVariable.clean('test'); //call

知道为什么会这样,我做错了什么?

5 个答案:

答案 0 :(得分:1)

如果您未处于ES5严格模式,则会将函数.clean()添加到全局对象。

所以,只需调用clean('test');就可以了。如果你想要它像你描述的那样,你需要将函数返回一个对象。

var someVariable = function() {
    return {
        clean: function(obj) {
            alert(obj);
        }
    };
};

如果您处于ES5严格模式,则此代码会抛出错误,因为this将绑定到null。引用this context variable的内容总是取决于函数的调用方式。在您的情况下,如上所述,this可以是windownull

如果您使用new键盘调用您的函数,它也会有效:

new someVariable().clean('test');

这是因为,new使函数成为构造函数this始终绑定到函数中新创建的对象。

答案 1 :(得分:1)

这种情况正在发生,因为函数范围内的this仍为window(就像在顶层声明clean函数一样)。你想要的是:

var someVariable = function() {};
someVariable.clean = function(obj) {
    alert(obj);
}

someVariable.clean('test'); //call

答案 2 :(得分:1)

您忘记初始化原型

new someVariable().clean('test'); 

如果你想要一种静态类,那么考虑使用文字:

someVariable = {
    clean: function(obj) {
            alert(obj);
        }
};

现在你可以打电话给你:

someVariable.clean('test');

答案 3 :(得分:0)

这不是该功能的属性。它仅在您执行该函数时设置,然后将其添加到全局对象(这仍然不是您想要的)。

您应该以与调用它相同的方式设置它:

var someVariable = function() {
    // ...
}

someVariable.clean = function(obj) {
    alert(obj);
}

someVariable.clean('test'); // call

答案 4 :(得分:0)

尝试这样做以获得更好的approch并解决您的错误。

var someVariable = cleanfunction(id); 

function cleanfunction(id)
{          
    clean: function(id) {
        alert(id);          
    }          
}