javascript js原型示例(примеры)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript js原型示例(примеры)相关的知识,希望对你有一定的参考价值。

let a = {
	prop : 1,
	f : function() {
		console.log(this.prop);
	}
},
	b = {
		prop : 2,
		f : function() {
			console.log(this.prop);
		}
	}
/*
Функция имеет контекст если:
-Функция вызывается из объекта через точку или квадратные скобки
-для вызова используется bind, call или apply
-функция вызывается с ключевым словом new
*/


// ----------------------------------------------------------------------------------------------------------
// bind  | Когда необходимо передать куда-либо функцию с измененным контекстом, либо отложить выполнение   |
//       | функции с измененным контекстом                                                                 |
//------------------------------------------------------------------------------------------------------------
// call  | Когда нужно изменить контекст ф-ции с заранее известным кол-вом аргументов и сразу вызвать ее   |
//------------------------------------------------------------------------------------------------------------
// apply | Когда нужно изменить контекст ф-ции с заранее НЕизвестным кол-вом аргументов и сразу вызвать ее |
//------------------------------------------------------------------------------------------------------------


//bind - берет функцию, меняет контекст и возвращает ее, но не вызывает
/*a.f();
b.f();*/
//При данной операции...теряется контекст функции (она становиться уже вне контекста объекта и
//возвращает undefined
let newFunc = a.f;
newFunc();
//При данном способе мы привязываем контекст объекта "B". Т.е. теперь this указывает на объект "B"
let newFunc = a.f.bind(b);
newFunc();

//Назначаем функции а в контексте b. Т.е. мы запускаем функцию из а, но в контексте объекта b
a.f = a.f.bind(b);

a.f();
b.f();

//Изменить контекст можно только один раз
let newFunc = a.f.bind(b);
newFunc = newFunc.bind(a);
newFunc();

//call - меняет контекст функции и вызывает ее

function summ(a, b) {
	return this.prop + a + b;
}

let a = {
        prop : 1,
        f : summ
    },
    b = {
        prop : 2,
        f : summ
        };

  a.f(1,1);
  b.f(2,2);

  a.f = a.f.bind(b, 1, 1);
  b.f = b.f.bind(a, 2, 2);
  a.f();
  b.f();


//Пример с bind
 for (let i = 0; i < 10; i++) {
	setTimeout((function(num){
	console.log(num);
	}).bind(this, i), 1000 * i);
}

// А теперь мы можем сделать проще. Просто указать в каком контексте будет работать фукнция
  console.log(summ.call(a, 1, 1));
  console.log(summ.call(b, 2, 2));

//Apply - тоже самое что и call, только аргументы можно передавать в виде массива

  console.log(summ.apply(a, [1, 1]));
  console.log(summ.apply(b, [2, 2]));

let a = {
        prop : 1,
        f : function() {
        	let func = function() {
        		console.log(this.prop);
			};
			// func();
			func.call(this);
		}
    },
    b = {
        prop : 2,
        f : summ
    };

a.f();

let a = {
        prop : 1,
        f : function() {

            let that = this;

            let func = function() {
                console.log(that.prop);
            };
            // func();
            func();
        }
    },
    b = {
        prop : 2,
        f : summ
    };

以上是关于javascript js原型示例(примеры)的主要内容,如果未能解决你的问题,请参考以下文章

javascript js arrow函数示例(примеры)

markdown Приемыпроектированияjavascript

javascript Меняемактивныйпунктменюприпрокруткестраницы

javascript Экземплярформыпоидентификатору#ExtJS

java Примерполиморфизма(отличныйпример)Lambda表达式

javascript ОтменяемкликпоВСЕМссылкам,скриптдляверстки