Как найти свойство в функции

#javascript

#javascript

Вопрос:

Я хочу знать, имеет ли функция определенное свойство. оператор ‘in’ должен был выполнить всю работу: цитата MSD:

Оператор in возвращает true, если указанное свойство находится в указанном объекте или его цепочке прототипов.

Итак, не могли бы вы, пожалуйста, объяснить результат этого кода?

 function Shape() {
  aaa = 10
}
Shape.prototype.bbb = 20

function Square() {}
Square.prototype = Object.create(Shape.prototype)
Square.prototype.constructor = Square;

console.log('aaa' in Shape) // false???
console.log('bbb' in Shape) // false???
console.log('aaa' in Square) // false???
console.log('bbb' in Square) // false???```
 

Комментарии:

1. Ты бы не сделал 'aaa' in Shape , ты бы сделал var x = new Shape(); 'aaa' in x

2. Я хочу задать его функции, а не объекту, созданному функцией

3. и это должно было сработать, поскольку функция также является объектом

4. Да, функция также является объектом, и у этого объекта нет 'aaa' свойства, или bbb , или любого другого

5. Да, это так — в цепочке свойств — так что цитата MSD применима и к этому случаю

Ответ №1:

in не проверяет свойства на class себе. Он проверяет наличие свойств в экземпляре класса.

 function Shape() {
  aaa = 10
}
Shape.prototype.bbb = 20

function Square() {}
Square.prototype = Object.create(Shape.prototype)
Square.prototype.constructor = Square;
const instance = new Square();
console.log('aaa' in instance) // false
console.log('bbb' in instance) // true 

Здесь, когда вы присваиваете свойства прототипу определенного function , это не означает, что функция будет обладать этими свойствами. Эти свойства в прототипах добавляются к экземплярам, созданным объектами.

Да, если вы присвоите свойство самой функции, тогда оно покажет использование in

 function test(){

}
test.prototype.x = 3;
test.something = 5
console.log(Object.keys(test)) //["something"]
console.log("something" in test) //true 

Комментарии:

1. Здесь нет «класса». только функции, которые также являются объектами — так что это должно было сработать

2. @DuduArbel Я добавил вторую часть. Если у вас остались какие-либо вопросы, не стесняйтесь задавать

3. @DuduArbel И здесь функция просто работает как класс.

4. Позвольте мне уточнить мой вопрос. У меня есть функция. могу ли я узнать, определено ли свойство каким- либо образом в экземпляре этой функции без создания экземпляра

5. @DuduArbel Для этого нет единого метода. Вам придется использовать "property" in func || "property" in func.prototype .