Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Тестовое задание Yandex (https://javascript.ru/forum/offtopic/18474-testovoe-zadanie-yandex.html)

B~Vladi 05.07.2011 19:00

Цитата:

Сообщение от monolithed
мне кажется так корректней))

Да любой объект (один) можно вернуть, тут главное понимать, что return не срабатывает в холостую при new.

monolithed 05.07.2011 19:01

Цитата:

Сообщение от Илья Кантор
Это такой яндекс-стиль, что ли - вызывать через new функции, возвращающие объекты?

видать просто хотели запутать ))

B@rmaley.e><e 05.07.2011 19:05

Цитата:

Сообщение от Илья Кантор
Например, вопросы 2 и 4 отсюда http://company.yandex.ru/job/vacanci...dia_search.xml

Яндекс меняет вопросы, или меня глючит, т.к. вторым вопросом у меня значится
var car = {
   color: 'red',
   getColor: function() {
      alert(this.color);
   }
};
 
car.getColor();
var getColor = car.getColor;
getColor();
?

monolithed 05.07.2011 19:06

Цитата:

Сообщение от B~Vladi
Да любой объект можно вернуть

так не отработает:
function MyClass() {
    return window;
}
var a = new MyClass,
*!*b = MyClass;*/!*
alert(a === b); // true


Цитата:

Сообщение от B@rmaley.e><e
Яндекс меняет вопросы, или меня глючит, т.к. вторым вопросом у меня значится

Илья ссылки перепутал))

Цитата:

Сообщение от B~Vladi
Эмм, для второго будет так:

В задании сказано дописать функцию f()
Если честно я по этим вопросам еще полгода назад прошелся (вроде бы все, что были), вот только со вторым так и не понял они случайно упустили конструктор (иначе ну слишком просто, не на внимательность же задачка)?

Цитата:

Сообщение от Илья Кантор
А для вопроса 2 - будет
function f(a) {
     var b = new function() { return a }
     return b;
}

Это так и имелось в виду?

А смысл возвращать фабрику? ))

Kolyaj 05.07.2011 20:17

Цитата:

Сообщение от Илья Кантор
Это такой яндекс-стиль, что ли - вызывать через new функции, возвращающие объекты? Коляй, поясни?

Я эти вопросы не придумывал, но именно этот мне нравится. В нескольких строках втиснуто много страниц теории.

B~Vladi 05.07.2011 20:44

Цитата:

Сообщение от monolithed
так не отработает:

Ну конечно не будет работать, функция же не вызывается. И этот кусок кода нельзя трогать, только написать конструктор MyClass.
Цитата:

Сообщение от monolithed
В задании сказано дописать функцию f()

А я её и дописывал. Определения конструктора у них нет, я для теста в консоли дописал, ничего страшного?

monolithed 05.07.2011 21:47

Цитата:

Сообщение от B~Vladi
Ну конечно не будет работать, функция же не вызывается. И этот кусок кода нельзя трогать, только написать конструктор MyClass.

В конкретном случае, условие задания выполняется, но если бы требовалось так new Foo === Foo, то вернуть window не прокатило бы. Поэтому лучше перестраховаться и написать универсальный вариант))

Не подумай только, что я придираюсь, вдруг кому на собеседовании попадется :D

Илья Кантор 06.07.2011 12:46

Как вам такая задачка на основе решения B~Vladi?

Есть код
var obj = new Foo();  // Foo is an arbitrary function
Требуется создать объект c тем же конструктором, что и obj.

Будет ли работать следующий код?
Если да, то будет ли он работать при любых Foo или только для некоторых?
var obj2 = new obj.constructor;

Илья Кантор 06.07.2011 13:01

Ну и вдогонку...
For an arbitrary document, we do the following:
var aList1 = document.getElementsByTagName('a'),
var aList2 = document.querySelectorAll('a');

document.body.appendChild(document.createElement('a'));

alert(aList2.length - aList1.length);
What will be the output? Why?

B~Vladi 06.07.2011 13:37

Цитата:

Сообщение от Илья Кантор
Будет ли работать следующий код?
Если да, то будет ли он работать при любых Foo или только для некоторых?

Будет.
Не будет, если Foo !== Object и перед созданием obj2, не был изменён оригинальный прототип Foo.

Цитата:

Сообщение от Илья Кантор
Ну и вдогонку...

Output: -1.
Потому что getElementsByTagName - живая коллекция, querySelectorAll - нет.


Часовой пояс GMT +3, время: 23:01.