Функция конструктора Javascript в этой переменной возвращает ошибку - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть функция, которую я вызываю следующим образом, но она возвращает someVariable.clean is not a function

Вот код:

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

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

Есть идеи, почему это происходит, что я делаю не так?

Ответы [ 5 ]

1 голос
/ 25 ноября 2011

Вы забыли инициализировать свой прототип класса

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

Если вы хотите немного изменить статический класс, подумайте об использовании литералов:

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

можете назвать свой путь:

someVariable.clean('test');
1 голос
/ 25 ноября 2011

Если вы не в строгом режиме 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 голос
/ 25 ноября 2011

Это происходит потому, что this в области действия функции по-прежнему window (так же, как если бы вы объявили функцию clean на верхнем уровне). То, что вы хотите:

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

someVariable.clean('test'); //call
0 голосов
/ 25 ноября 2011

Попробуйте сделать так, чтобы лучше подходить и решить вашу ошибку.

var someVariable = cleanfunction(id); 

function cleanfunction(id)
{          
    clean: function(id) {
        alert(id);          
    }          
}
0 голосов
/ 25 ноября 2011

Это не свойство функции. Он устанавливается только в том случае, если вы выполняете функцию, а затем добавляется к глобальному объекту (что по-прежнему не то, что вам нужно).

Вместо этого вы должны установить его так же, как вы его называете:

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

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

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