123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- // 1. Создайте объект calculator с методами:
- // read() запрашивает prompt для двух значений и сохраняет их как свойства объекта x, y
- // sum() возвращает сумму этих двух значений
- // multi() возвращает произведение этих двух значений
- // diff() возвращает разницу
- // div() возвращает частное
- var calculator = {
- read: function() {
- this.x = +prompt("Введите Х", "");
- this.y = +prompt("Введите У", "");
- },
- sum: function() {
- return this.x + this.y;
- },
- multi: function() {
- return this.x * this.y;
- },
- diff: function() {
- return this.x - this.y;
- },
- div: function() {
- return this.x / this.y;
- }
- }
- calculator.read();
- alert( calculator.sum() );
- alert( calculator.multi() );
- alert( calculator.diff() );
- alert( calculator.div() );
- // 2. Создайте объект coffeeMachine со свойством message: ‘Your coffee is ready!’
- // и методом start(), при вызове которого – coffeeMachine.start() – через 3 секунды
- // появляется окно с сообщением, записанным в свойстве объекта message.
- var coffeeMachine = {
- message: "Your coffee is ready!",
- start: function() {
- that = this;
- setTimeout( function() {
- alert(that.message);
- }, 3000);
- }
- }
- coffeeMachine.start();
- // 3. Создайте функцию hello(), которая выводит приветствие пользователю.
- // Создайте два объекта, содержащие поля firstname, lastname. Используя метод
- // call и функцию hello() приветствуйте каждого из пользователей персонально.
- function hello() {
- alert("Hello, " + this.getFullName());
- };
- var user_1 = {
- firstname: "John",
- lastname: "Johnson",
- getFullName: function() {
- return this.firstname + " " + this.lastname;
- }
- };
- var user_2 = {
- firstname: "Jack",
- lastname: "Jackson",
- getFullName: function() {
- return this.firstname + " " + this.lastname;
- }
- };
- hello.call(user_1);
- hello.call(user_2);
- // 4. Создайте объект counter с методами увеличения, уменьшения значения
- // счетчика и методом возврата текущего значения. Используйте концепцию
- // chaining для создания цепочки вызовов.
- var counter = {
- count: 0,
- inc: function() {
- this.count++;
- return this;
- },
- dec: function() {
- this.count--;
- return this;
- },
- getValue: function() {
- return this.count;
- }
- }
- var current = counter.inc().inc().dec().inc().dec().getValue();
- alert(current);
- // 5. Создайте объект с данными: x, y и методами: getSum, getSum, getMulti, getDiv.
- // Методы объекта ничего не реализуют, а только выводят в alert сообщения вида
- // ‘1 + 1 = 2’ или ‘1 / 0 = Infinity’. Для расчетов все методы используют функционал
- // ранее созданного калькулятора.
- var calculator = {
- read: function() {
- this.x = +prompt("Введите Х", "");
- this.y = +prompt("Введите У", "");
- },
- sum: function() {
- return this.x + this.y;
- },
- multi: function() {
- return this.x * this.y;
- },
- diff: function() {
- return this.x - this.y;
- },
- div: function() {
- return this.x / this.y;
- }
- }
- var object = {
- x: +prompt("Введите Х", ""),
- y: +prompt("Введите Y", ""),
- getSum: function() {
- var sum = calculator.sum;
- return alert(this.x + "+" + this.y + "=" + sum.call(object));
- },
- getDiff: function() {
- var diff = calculator.diff;
- return alert(this.x + "-" + this.y + "=" + diff.call(object));
- },
- getMulti: function() {
- var multi = calculator.multi;
- return alert(this.x + "*" + this.y + "=" + multi.call(object));
- },
- getDiv: function() {
- var div = calculator.div;
- return alert(this.x + "/" + this.y + "=" + div.call(object));
- }
- }
- // 6. Придумайте алгоритм расчета суммы всех фактических параметров функции
- // с использованием только рекурсии:
- var sum = 0;
-
- function getSum(a, b, ...other) {
- if (arguments.length >= 2) {
- sum = a + b;
- return getSum(sum, ...other);
- } else {
- return a;
- }
- };
- getSum(1,2,3,4,5);
- // 7. Создайте объект со свойством delay и методами appendTo и appendText.
- // Метод appendTo с помощью jQuery добавляет абзац в контейнер, переданный в
- // параметре метода. Метод appendText может дописывает текст в добавленный элемент.
- // Создайте массив строк и запустите цикл по этому массиву. С периодичностью,
- // определенной в свойстве delay, в текст добавленного html-элемента добавляется
- // соответствующий по порядку элемент массива. Учтите, что для доступа к вашему
- // элементу не должен производиться поиск по DOM-дереву.
- var arr = ["Hello,", "World!", "This", "is", "some", "text"];
- var object = {
- delay: 1000,
- appendTo: function(par) {
- $(par).append("<p>");
- },
- appendText: function(str) {
- $("p").append(str);
- }
- };
- object.appendTo("body");
- for(var i = 0; i < arr.length; i++) {
- (function(i) {
- setTimeout(function() {
- object.appendText(arr[i]+" ");
- }, object.delay+i*1000)
- })(i);
- }
- // 8. Есть следующий код:
- var country = {
- name: 'Ukraine',
- language: 'ukrainian',
- capital: {
- name: 'Kyiv',
- population: 2907817,
- area: 847.66
- }
- };
- function format(start, end) {
- console.log(start + this.name + end);
- }
- format.call(country,"",""); // Ukraine
- format.apply(country, ["[", "]"]); // [Ukraine]
- format.call(country.capital,"",""); // Kyiv
- format.apply(country.capital, ["",""]); // Kyiv
- format.apply(null, [""]); // undefined
- // 9. Создайте объект user с полем name. Создайте функцию format с параметрами start и end.
- // Привяжите функцию format() к объекту user таким образом, чтобы ее вызов возвращал
- // отформатированное имя пользователя.
- // Реализуйте 2 версии текущего задания, используя:
- // 1. Анонимную функцию;
- // 2. Метод bind().
- var user = {
- name: "John"
- };
- function format(start, end) {
- console.log(start + this.name + end);
- }
- // function() {
- // format("<<<", ">>>");
- // }
- var userFormat = format.bind(user);
- userFormat('<<<', '>>>');
- // 10. Напишите функцию concat, которая соединяет две строки, разделенные каким-то
- // символом: разделитель и строки передаются в параметрах функции. Используя карринг,
- // создайте новую функцию hello, которая которая выводит приветствие тому, кто передан
- // в ее параметре
- function concat(str1, sep, str2) {
- return console.log(str1+sep+str2);
- }
- var hello = concat.bind(null, "Hello", " ");
- hello('World');
- hello('John');
|