Примитивное значение, возвращаемое конструктором, будет потеряно

Я создал функцию:

function CheckHidden(el){ return $(el).css('display')!='none' }

Моя IDE предупреждает меня, что:

Примитивное значение, возвращаемое конструктором, будет потеряно при вызове с помощью 'new'

Собственно, когда я называю это следующим образом:

var all = $("#catalog-body > div").filter(function(){return  CheckHidden(this)})

он не работает и не уменьшает набор элементов до незакрытых. Пожалуйста, объясните мне вопрос. У меня огромная нехватка знаний.

Ответ 1

jQuery действительно имеет что-то вроде этого встроенного. Вы можете использовать селектор :visible. Вы можете просто:

var all=$("#catalog-body > div").filter(':visible')

чтобы получить видимые элементы.

Ответ 2

Я столкнулся с этим предупреждением сам, и если вы хотите узнать причину, это потому, что ваши IDE ожидают, что имена функций начинаются с строчной буквы. Поскольку ваша функция называется CheckHidden с капиталом C, она считает это объявлением класса.

Однако вы все равно должны использовать jQuery: видимый селектор, чтобы исправить вашу конкретную проблему.

Ответ 3

Если вы создаете объект, используя ключевое слово new (как указано в предупреждении), JS возвращает новый экземпляр объекта, а не возвращаемое значение из конструктора.

Функция типа

function CheckHidden() {
    return false;
}

будет возвращать два разных значения в зависимости от того, как он выполняется.

// "a" is boolean value
var a = CheckHidden();

// "a" is an object of type "CheckHidden"
var a = new CheckHidden();

Ответ 4

Если вы хотите вытащить все видимые элементы, вы можете использовать jQuery :visible селектор:

var all = $("#catalog-body > div:visible")

И наоборот, если вы хотите вытащить все скрытые элементы, вы можете комбинировать это с jQuery :not селектор:

$("#catalog-body > div:not(:visible)")