Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(function(){
"use strict";
/** @constructor */
function test(){ this.lol = 1 };
test();
})()
TypeError: Cannot set property 'lol' of undefinedTypeError: this is undefinedUnhandled Error: Cannot convert 'this' to objectvar Vector = function(x, y, z) {
if (typeof this === "undefined") {
return new Vector(x, y, z);
}
this.__x = x;
this.__y = y;
this.__z = z;
};
var y = 5;
var x = function(){
return y;
};
var z = function(t){
var y = 10;
return t();
}
z(x);
На собеседовании же, у меня все в голове перемешалось. И банальный миксин через call не смог написать.
Этот пример затрагивает самые базовые понятия JS
function Boob(size) {
if (Boob.instance) {
return Boob.instance;
}
Boob.instance = this;
this.size = size;
}
a = new Boob(3);
b = new Boob(4);
alert(a.size == b.size);
за такие задачки на собеседованиях нужно одно место отрывать.
я хоть ответ то и знаю, но когда устраиваешься на работу — волнуешься и на собеседовании точно бы всякую околесицу нес бы.
var value = 5;
function returnValue () {
return value;
}
function applyCallback(callback) {
var value = 10;
return callback();
}
applyCallback( returnValue );
do {
console.log(1);
} while (false);
while (0) {
console.log(2);
}
// Output = ?
+function start() {
console.log(z(x(z)));
}()
function x(a) {
return new y(a);
}
function y(b) {
if (d === 5) {
this.z = b({z:1});
} else if (d === undefined) {
return {z:b({z:2})};
}
return x(z);
}
function z(n) {
return ([]+{}).split.constructor('return arguments[0]'+([]+{})[0]+'"z"'+([]+{})[14])(n);
}
var d = 5;
Не соглашаюсь лишь с тем, что на собеседованиях нужны вопросы на внимательность
Не соглашаюсь лишь с тем, что на собеседованиях нужны вопросы на внимательность.
Далеко не все люди на собеседованиях волнуются
а не тот, кто просит не давать ему сложных заданий.
На такую задачу не сможет ответить или новичёк или человек, который вообще не может держать себя в руках. И тем и другим надо ещё учиться и рано устраиваться на работу по такой специальности.
Все волнуются. Да. Но это никак не влияет на знания и способность вспоминать. Если кандидат крепок в знаниях, волнение почти не сказывается на его способности давать верные ответы.
В соревнованиях по стрельбе все в равных условиях. Следовательно есть два фактора, которые определяют лучшего стрелка (кроме исключений типа сломанного ружья и вчерашней пьянки) — это навык и умение справится с волнением.
return {
// ... some properties,
params: new function() {
var pairs = url.search.slice(1).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
this[pair[0] || ''] = pair[1] || '';
}
}
}
params: new function() {
var pairs = url.search.slice(1).split('&'),
result = {};
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
result[pair[0] || ''] = pair[1] || '';
}
return result;
}
App.popupManager = {
open: function (url) { },
closeAll: function () { }
}
нет, не тоже самое. В вашем случае не получится выделить «приватные функции» через просто объявление function myPrivateFunction(){} внутри конструктора.
(function () {
function myPrivateFunction () {}
App.popupManager = {
open: function (url) { },
closeAll: function () { }
}
})();
Создаём экземпляр класса:
function MyClass() {}; var instance = new MyClass();
О! Прям как синглтон! Там тоже используется названиеinstance!
obj.value = 42; //когда название поля известно статически
var valueName = "value"; // но может и не быть известно
obj[valueName] = 42; // эквивалентно obj.value = 42
В ближайшее время я скорее всего напишу статью, в которой описывается для чего нужно знать эти тонкости (например, jQuery.proxy)
В ближайшее время я скорее всего напишу статью, в которой описывается для чего нужно знать эти тонкости (например, jQuery.proxy)
function classA(a) {
console.log(this.lolcat, a)
}
classA.prototype.lolcat = "=^__^=";
var classB = classA.bind({lolcat : "=°__°="}, "x");
classB.prototype = {lolcat : "=o__0=" }
new classA("A");//"=^__^=", A
new classB("B");//"=^__^=", x а не "=°__°=", x
thisArg
The value to be passed as the this parameter to the target function when the bound function is called. The value is ignored if the bound function is constructed using the new operator.
Жесть, никогда бы не подумал. А в реальном коде такое где-нибудь используется?
// Где то объявлено
function myFunc(a) {
this.a = a;
return this;
}
var BoundedFunc = myFunc.bind({z: 30}, 10);
...
//Попытаемся использовать
var res = BoundedFunc.call({z: 40});
console.log(res.z); // 30 - вот вообще не неожиданно
var magnitudeOrder = Math.pow.bind( Math, 10 ); magnitudeOrder(2); // 100 magnitudeOrder(5); // 10000
var binded = function () { console.log( this.x ); }.bind({ x: 100 });
Function.prototype.bindIfGlobalContext" был бы сомнительным.Странное мнение. Вообще-то по идее BoundedFunc — это функция с другим интерфейсом.
Например, мы имеем какое то API и получаем из него функцию. О том какая она, мы не имеем представления.
void function() {
alert([this == 1, this === 1]); // [true, false]
}.call(1);
void function() {
'use strict';
alert([this == 1, this === 1]); // [true, true]
}.call(1);
Ключевое слово this в javascript — учимся определять контекст на практике