我有一个函数,我按以下方式调用,但它返回someVariable.clean is not a function
以下是代码:
var someVariable = function() {
this.clean = function(obj) {
alert(obj);
}
}
someVariable.clean('test'); //call
知道为什么会这样,我做错了什么?
答案 0 :(得分:1)
如果您未处于ES5严格模式,则会将函数.clean()
添加到全局对象。
所以,只需调用clean('test');
就可以了。如果你想要它像你描述的那样,你需要将函数返回一个对象。
var someVariable = function() {
return {
clean: function(obj) {
alert(obj);
}
};
};
如果您处于ES5严格模式,则此代码会抛出错误,因为this
将绑定到null
。引用this context variable
的内容总是取决于函数的调用方式。在您的情况下,如上所述,this
可以是window
或null
。
如果您使用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);
}
}