JavaScript | Прототипирование, застрял немножко

286
16 февраля 2017, 00:23

Написал такую штуку: Вопросы собственно в коде.

var Person = { 
	constructor: function(name, age, gender) { 
		this.name = name; 
		this.age = age; 
		this.gender = gender; 
		return this; //Что тут возвращает this? Все аргументы из фунцкии или что? 
	}, 
}; 
 
/*________________________*/ 
 
 
var WebDeveloper = Object.create(Person); //Тут пока всё более-менее понятно 
WebDeveloper.constructor = function(name, age, gender, skills) { 
	Person.constructor.apply(this, arguments); //что делает apply? я читал, что устанавливает значение this в функции. Отсюда и вопрос: разве this это типо не ключевое слово а-ля var?  
	this.skills = skills || []; //что собственно тут устанавливается? skills или массив? пустой? и когда сработает skills, а когда массив? значение skills внутри функции теперь становится и значением skills которая за пределами функции - это я понял. ну а метод apply тут причем? 
	return this; 
}; 
 
var developer = Object.create(WebDeveloper).constructor("Jack", 21, "male", ["html", "css", "js", "php", "mysql"]);

Answer 1

var Person = { 
	constructor: function(name, age, gender) { 
		this.name = name; 
		this.age = age; 
		this.gender = gender; 
		return this; // A: Что тут возвращает this? Все аргументы из фунцкии или что? 
                             // Q: Зависит от метода вызова. 
                             //   Метод: Person 
                             //   Функция: window (или undefined в строгом режиме) 
	}, 
}; 
 
/*________________________*/ 
 
 
var WebDeveloper = Object.create(Person); //Тут пока всё более-менее понятно 
WebDeveloper.constructor = function(name, age, gender, skills) { 
	Person.constructor.apply(this, arguments); // A: что делает apply? я читал, что устанавливает значение this в функции. Отсюда и вопрос: разве this это типо не ключевое слово а-ля var?  
                                                   // Q: Действительно, вызывает с указанным this. Здесь передаётся текущий this 
	this.skills = skills || []; // A: что собственно тут устанавливается? skills или массив? пустой? и когда сработает skills, а когда массив? значение skills внутри функции теперь становится и значением skills которая за пределами функции - это я понял. ну а метод apply тут причем? 
                                    // Q: Устанавливается свойство равное или skills, либо, если он false, пустой массив 
                                    // apply вызывает родительский конструктор, чтобы он навесил свои значения (паттерн такой есть) 
	return this; 
}; 
 
var developer = Object.create(WebDeveloper).constructor("Jack", 21, "male", ["html", "css", "js", "php", "mysql"]);

READ ALSO
Как в React.js клонировать элемент?

Как в React.js клонировать элемент?

Как в Reactjs клонировать элемент? В голову приходит:

369
Node/ES6 import. Uncaught SyntaxError: Unexpected token import при запуске приложения

Node/ES6 import. Uncaught SyntaxError: Unexpected token import при запуске приложения

Решил использовать react-scrollbar для кастомизации скроллбаров на сайтеВ мануале по использованию, указывается нодовский импорт модуля

934
PHP-скрипт возвращает состояние rejected в fail()

PHP-скрипт возвращает состояние rejected в fail()

Отправляю ajax-запрос к php-файлу:

356
jquery input focus out дочерний элемент

jquery input focus out дочерний элемент

Есть input с ajax поиском

490