瀏覽代碼

Методы объектов и контекст исполнения функции

Oleg 6 年之前
父節點
當前提交
17b96e4458
共有 2 個文件被更改,包括 285 次插入0 次删除
  1. 12 0
      JS_13.02.2018/index.html
  2. 273 0
      JS_13.02.2018/script.js

+ 12 - 0
JS_13.02.2018/index.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>document</title>
+	<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
+	<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+
+</body>
+</html>

+ 273 - 0
JS_13.02.2018/script.js

@@ -0,0 +1,273 @@
+
+// 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'); 
+
+
+
+