Function.prototype.bind()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Сводка
ÐеÑод bind() ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð¿Ñи вÑзове ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² каÑеÑÑве конÑекÑÑа вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ this пÑедоÑÑавленное знаÑение. РмеÑод Ñакже пеÑедаÑÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ð°ÑгÑменÑов, коÑоÑÑе бÑдÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð¿ÐµÑед пеÑеданнÑми в пÑивÑзаннÑÑ ÑÑнкÑÐ¸Ñ Ð°ÑгÑменÑами пÑи ÐµÑ Ð²Ñзове.
СинÑакÑиÑ
fun.bind(thisArg[, arg1[, arg2[, ...]]])
ÐаÑамеÑÑÑ
thisArg-
ÐнаÑение, пеÑедаваемое в каÑеÑÑве
thisв ÑелевÑÑ ÑÑнкÑÐ¸Ñ Ð¿Ñи вÑзове пÑивÑзанной ÑÑнкÑии. ÐнаÑение игноÑиÑÑеÑÑÑ, еÑли пÑивÑÐ·Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑиÑÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑаnew. arg1, arg2, ...-
ÐÑгÑменÑÑ Ñелевой ÑÑнкÑии, пеÑедаваемÑе пеÑед аÑгÑменÑами пÑивÑзанной ÑÑнкÑии пÑи вÑзове Ñелевой ÑÑнкÑии.
ÐпиÑание
ÐеÑод bind() ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ "пÑивÑзаннÑÑ ÑÑнкÑиÑ" (ÐФ). ÐФ - ÑÑо "необÑÑнÑй ÑÑнкÑионалÑнÑй обÑекÑ" ( ÑеÑмин из ECMAScript 6 ), коÑоÑÑй ÑвлÑеÑÑÑ Ð¾Ð±ÑÑÑкой над иÑÑ
однÑм ÑÑнкÑионалÑнÑм обÑекÑом. ÐÑзов ÐФ пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° обÑÑнÑÑой ÑÑнкÑии.
ÐФ Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑие внÑÑÑенние ( ÑкÑÑÑÑе ) ÑвойÑÑва:
- [[BoundTargetFunction]] - обоÑаÑиваемÑй (Ñелевой ) ÑÑнкÑионалÑнÑй обÑекÑ
- [[BoundThis]] - знаÑение, коÑоÑое вÑегда пеÑедаÑÑÑÑ Ð² каÑеÑÑве знаÑÐµÐ½Ð¸Ñ this пÑи вÑзове обÑÑнÑÑой ÑÑнкÑии.
- [[BoundArguments]] - ÑпиÑок знаÑений, ÑлеменÑÑ ÐºÐ¾ÑоÑого иÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве пеÑвого аÑгÑменÑа пÑи вÑзове обоÑаÑиваемой ÑÑнкÑии.
- [[Call]] - внÑÑÑенний меÑод. ÐÑполнÑÐµÑ ÐºÐ¾Ð´ (ÑÑнкÑионалÑное вÑÑажение), ÑвÑзаннÑй Ñ ÑÑнкÑионалÑнÑм обÑекÑом.
Ðогда ÐФ вÑзÑваеÑÑÑ, иÑполнÑеÑÑÑ ÐµÑ Ð²Ð½ÑÑÑенний меÑод [[Call]] Ñо ÑледÑÑÑими аÑгÑменÑами Call(target, boundThis, args).
- target - [[BoundTargetFunction]];
- boundThis - [[BoundThis]];
- args - [[BoundArguments]].
ÐÑивÑÐ·Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑконÑÑÑÑиÑована Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа new: ÑÑо ÑабоÑÐ°ÐµÑ Ñак, как еÑли Ð±Ñ Ð²Ð¼ÐµÑÑо Ð½ÐµÑ ÐºÐ¾Ð½ÑÑÑÑиÑовалаÑÑ ÑÐµÐ»ÐµÐ²Ð°Ñ ÑÑнкÑиÑ. ÐÑедоÑÑавлÑемое знаÑение this в ÑÑом ÑлÑÑае игноÑиÑÑеÑÑÑ, Ñ
оÑÑ Ð²ÐµÐ´ÑÑие аÑгÑменÑÑ Ð²ÑÑ ÐµÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð² ÑмÑлиÑÑемÑÑ ÑÑнкÑиÑ.
ÐÑимеÑÑ
>ÐÑимеÑ: Ñоздание пÑивÑзанной ÑÑнкÑии
ÐÑоÑÑейÑим ÑпоÑобом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ bind() ÑвлÑеÑÑÑ Ñоздание ÑÑнкÑии, коÑоÑаÑ, вне завиÑимоÑÑи Ð¾Ñ ÑпоÑоба ÐµÑ Ð²Ñзова, вÑзÑваеÑÑÑ Ñ Ð¾Ð¿ÑеделÑннÑм знаÑением this. ÐбÑÑнÑм заблÑждением Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñков в JavaScript ÑвлÑеÑÑÑ Ð¸Ð·Ð²Ð»ÐµÑение меÑода из обÑекÑа Ñ ÑелÑÑ ÐµÐ³Ð¾ далÑнейÑего вÑзова в каÑеÑÑве ÑÑнкÑии и ожидание Ñого, ÑÑо он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¾ÑигиналÑнÑй обÑÐµÐºÑ Ð² каÑеÑÑве Ñвоего знаÑÐµÐ½Ð¸Ñ this (напÑимеÑ, Ñакое Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑиÑÑÑÑ Ð¿Ñи иÑполÑзовании меÑода как колбÑк-ÑÑнкÑии). Ðднако, без ÑпеÑиалÑной обÑабоÑки, оÑигиналÑнÑй обÑÐµÐºÑ Ð·Ð°ÑаÑÑÑÑ ÑеÑÑеÑÑÑ. Создание пÑивÑзанной ÑÑнкÑии из ÑÑнкÑии, иÑполÑзÑÑÑей оÑигиналÑнÑй обÑекÑ, изÑÑно ÑеÑÐ°ÐµÑ ÑÑÑ Ð¿ÑоблемÑ:
this.x = 9;
var module = {
x: 81,
getX: function () {
return this.x;
},
};
module.getX(); // 81
var getX = module.getX;
getX(); // 9, поÑколÑÐºÑ Ð² ÑÑом ÑлÑÑае this ÑÑÑлаеÑÑÑ Ð½Ð° глобалÑнÑй обÑекÑ
// ÑоздаÑм новÑÑ ÑÑнкÑÐ¸Ñ Ñ this, пÑивÑзаннÑм к module
var boundGetX = getX.bind(module);
boundGetX(); // 81
ÐÑимеÑ: ÑаÑÑиÑнÑе ÑÑнкÑии
СледÑÑÑим пÑоÑÑейÑим ÑпоÑобом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ bind() ÑвлÑеÑÑÑ Ñоздание ÑÑнкÑии Ñ Ð¿ÑедопÑеделÑннÑми аÑгÑменÑами. ÐÑи аÑгÑменÑÑ (еÑли они еÑÑÑ) пеÑедаÑÑÑÑ Ð¿Ð¾Ñле знаÑÐµÐ½Ð¸Ñ this и вÑÑавлÑÑÑÑÑ Ð¿ÐµÑед аÑгÑменÑами, пеÑедаваемÑми в ÑелевÑÑ ÑÑнкÑÐ¸Ñ Ð¿Ñи вÑзове пÑивÑзанной ÑÑнкÑии.
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
// СоздаÑм ÑÑнкÑÐ¸Ñ Ñ Ð¿ÑедÑÑÑановленнÑм ведÑÑим аÑгÑменÑом
var leadingThirtysevenList = list.bind(undefined, 37);
var list2 = leadingThirtysevenList(); // [37]
var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
ÐÑимеÑ: Ñ setTimeout
Ðо ÑмолÑаниÑ, внÑÑÑи window.setTimeout() конÑекÑÑ this ÑÑÑанавливаеÑÑÑ Ð² обÑÐµÐºÑ window (или global). ÐÑи ÑабоÑе Ñ Ð¼ÐµÑодами клаÑÑа, ÑÑебÑÑÑими this Ð´Ð»Ñ ÑÑÑлки на ÑкземплÑÑÑ ÐºÐ»Ð°ÑÑа, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñвно пÑивÑзаÑÑ this к колбÑк-ÑÑнкÑии Ð´Ð»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑкземплÑÑа.
function LateBloomer() {
this.petalCount = Math.ceil(Math.random() * 12) + 1;
}
// ÐбÑÑвлÑем ÑвеÑение Ñ Ð·Ð°Ð´ÐµÑжкой в 1 ÑекÑндÑ
LateBloomer.prototype.bloom = function () {
window.setTimeout(this.declare.bind(this), 1000);
};
LateBloomer.prototype.declare = function () {
console.log("Я пÑекÑаÑнÑй ÑвеÑок Ñ " + this.petalCount + " лепеÑÑками!");
};
ÐÑимеÑ: пÑивÑзÑвание ÑÑнкÑий, иÑполÑзÑемÑÑ Ð² каÑеÑÑве конÑÑÑÑкÑоÑов
ÐÑедÑпÑеждение:
ÐÑÐ¾Ñ Ñаздел демонÑÑÑиÑÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи JavaScript и докÑменÑиÑÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе гÑаниÑнÑе ÑлÑÑаи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑода bind(). ÐоказаннÑе ниже меÑÐ¾Ð´Ñ Ð½Ðµ ÑвлÑÑÑÑÑ Ð»ÑÑÑей пÑакÑикой и, веÑоÑÑно, иÑ
не ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð² ÑабоÑем окÑÑжении.
ÐÑивÑзаннÑе ÑÑнкÑии авÑомаÑиÑеÑки подÑ
одÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¼ÐµÑÑе Ñ Ð¾Ð¿ÐµÑаÑоÑом new Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
ÑкземплÑÑов, ÑоздаваемÑÑ
Ñелевой ÑÑнкÑией. Ðогда пÑивÑÐ·Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑениÑ, пÑедоÑÑавлÑемое знаÑение this игноÑиÑÑеÑÑÑ. Ðднако, пÑедоÑÑавлÑемÑе аÑгÑменÑÑ Ð²ÑÑ Ñак же вÑÑавлÑÑÑÑÑ Ð¿ÐµÑед аÑгÑменÑами конÑÑÑÑкÑоÑа:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return this.x + "," + this.y;
};
var p = new Point(1, 2);
p.toString(); // '1,2'
var emptyObj = {};
var YAxisPoint = Point.bind(emptyObj, 0 /*x*/);
// не поддеÑживаеÑÑÑ Ð¿Ð¾Ð»Ð¸Ñилом, пÑиведÑннÑм ниже,
// но оÑлиÑно ÑабоÑÐ°ÐµÑ Ñ ÑоднÑм bind:
var YAxisPoint = Point.bind(null, 0 /*x*/);
var axisPoint = new YAxisPoint(5);
axisPoint.toString(); // '0,5'
axisPoint instanceof Point; // true
axisPoint instanceof YAxisPoint; // true
new Point(17, 42) instanceof YAxisPoint; // true
ÐбÑаÑиÑе внимание, ÑÑо вам не нÑжно делаÑÑ Ð½Ð¸Ñего оÑобенного Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑивÑзанной ÑÑнкÑии, иÑполÑзÑемой Ñ Ð¾Ð¿ÐµÑаÑоÑом new. РиÑоге, Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñвно вÑзÑваемой пÑивÑзанной ÑÑнкÑии, вам Ñоже не нÑжно делаÑÑ Ð½Ð¸Ñего оÑобенного, даже еÑли вам ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑивÑÐ·Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²ÑзÑвалаÑÑ ÑолÑко Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа new.
// ÐÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑен пÑÑмо в ваÑей конÑоли JavaScript
// ...пÑодолжение пÑимеÑа вÑÑе
// ÐÑÑ ÐµÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзÑваÑÑ ÐºÐ°Ðº ноÑмалÑнÑÑ ÑÑнкÑиÑ
// (Ñ
оÑÑ Ð¾Ð±ÑÑно ÑÑо не пÑедполагаеÑÑÑ)
YAxisPoint(13);
emptyObj.x + "," + emptyObj.y;
// > '0,13'
ÐÑли Ð²Ñ Ñ
оÑиÑе поддеÑживаÑÑ Ð¸ÑполÑзование пÑивÑзанной ÑÑнкÑии ÑолÑко Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа new, либо ÑолÑко Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑÑмого вÑзова, ÑÐµÐ»ÐµÐ²Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° пÑедÑÑмаÑÑиваÑÑ Ñакие огÑаниÑениÑ.
ÐÑимеÑ: Ñоздание ÑокÑаÑений
ÐеÑод bind() Ñакже полезен в ÑлÑÑаÑÑ
, еÑли Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ ÑокÑаÑение Ð´Ð»Ñ ÑÑнкÑии, ÑÑебÑÑÑей опÑеделÑнное знаÑение this.
ÐозÑмÑм, напÑимеÑ, меÑод Array.prototype.slice, коÑоÑÑй Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÑÑивоподобного обÑекÑа в наÑÑоÑÑий маÑÑив. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ðµ ÑокÑаÑение:
var slice = Array.prototype.slice;
// ...
slice.call(arguments);
С помоÑÑÑ Ð¼ÐµÑода bind(), ÑÑо ÑокÑаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпÑоÑено. Ð ÑледÑÑÑем кÑÑке кода slice ÑвлÑеÑÑÑ ÑÑнкÑией, пÑивÑзанной к ÑÑнкÑии call() обÑекÑа Function.prototype, Ñо знаÑением this, ÑÑÑановленнÑм в ÑÑнкÑÐ¸Ñ slice() обÑекÑа Array.prototype. ÐÑо ознаÑаеÑ, ÑÑо дополниÑелÑнÑй вÑзов call() Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑÑанÑн:
// Тоже Ñамое, ÑÑо и slice в пÑедÑдÑÑем пÑимеÑе
var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.call.bind(unboundSlice);
// ...
slice(arguments);
ÐолиÑил
ФÑнкÑÐ¸Ñ bind ÑвлÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ к ÑÑандаÑÑÑ ECMA-262 5-го изданиÑ; поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð½Ðµ во вÑеÑ
бÑаÑзеÑаÑ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑаÑÑиÑно обойÑи ÑÑо огÑаниÑение, вÑÑавив ÑледÑÑÑий код в наÑало ваÑиÑ
ÑкÑипÑов, он позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей bind() в ÑеализаÑиÑÑ
, не имеÑÑиÑ
его Ñодной поддеÑжки.
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// ближайÑий аналог внÑÑÑенней ÑÑнкÑии
// IsCallable в ECMAScript 5
throw new TypeError(
"Function.prototype.bind - what is trying to be bound is not callable",
);
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(
this instanceof fNOP && oThis ? this : oThis,
aArgs.concat(Array.prototype.slice.call(arguments)),
);
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
ÐекоÑоÑÑе из Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð¾ÑлиÑий (Ñак же могÑÑ Ð±ÑÑÑ Ð¸ дÑÑгие, даннÑй ÑпиÑок далеко не иÑÑеÑпÑваÑÑий) Ð¼ÐµÐ¶Ð´Ñ ÑÑой ÑеализаÑией и ÑеализаÑией по ÑмолÑаниÑ:
- ЧаÑÑиÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ Ð¿ÑедполагаеÑ, ÑÑо меÑодÑ
Array.prototype.slice(),Array.prototype.concat(),Function.prototype.call()иFunction.prototype.apply()ÑвлÑÑÑÑÑ Ð²ÑÑÑоеннÑми, имеÑÑ ÑÐ²Ð¾Ñ Ð¿ÐµÑвонаÑалÑное знаÑение. - ЧаÑÑиÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ ÑоздаÑÑ ÑÑнкÑии, не имеÑÑие неизменÑемÑÑ
ÑвойÑÑв «оÑÑавленной пилÑли» â
callerиargumentsâ коÑоÑÑе вÑбÑаÑÑваÑÑ Ð¸ÑклÑÑениеTypeErrorпÑи попÑÑке полÑÑиÑÑ, ÑÑÑановиÑÑ Ð¸Ð»Ð¸ ÑдалиÑÑ ÑÑи ÑвойÑÑва. (Такие ÑвойÑÑва могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ, еÑли ÑеализаÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑObject.defineProperty, либо ÑаÑÑиÑно ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ [без Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ÑклÑÑение-пÑи-попÑÑке-ÑдалениÑ], еÑли ÑеализаÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑаÑÑиÑениÑObject.prototype.__defineGetter__()иObject.prototype.__defineSetter__().) - ЧаÑÑиÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ ÑоздаÑÑ ÑÑнкÑии, имеÑÑие ÑвойÑÑво
prototype. (ÐÑавилÑÐ½Ð°Ñ Ð¿ÑивÑÐ·Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÐµÐ³Ð¾ не имееÑ.) - ЧаÑÑиÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ ÑоздаÑÑ Ð¿ÑивÑзаннÑе ÑÑнкÑии, ÑÑÑ ÑвойÑÑво
lengthне ÑооÑвеÑÑÑвÑÐµÑ Ñ Ð¾Ð¿Ñеделением в ECMA-262; оно Ñавно 0, в Ñо вÑемÑ, как Ð¿Ð¾Ð»Ð½Ð°Ñ ÑеализаÑиÑ, в завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑвойÑÑваlengthÑелевой ÑÑнкÑии и колиÑеÑÑва пÑедопÑеделÑннÑÑ Ð°ÑгÑменÑов, Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð·Ð½Ð°Ñение, оÑлиÑное Ð¾Ñ Ð½ÑлÑ.
ÐÑли Ð²Ñ ÑеÑили иÑполÑзоваÑÑ ÑаÑÑиÑнÑÑ ÑеализаÑиÑ, не ÑаÑÑÑиÑÑвайÑе на коÑÑекÑнÑÑ ÑабоÑÑ Ð² ÑеÑ
ÑлÑÑаÑÑ
, когда ÑеализаÑÐ¸Ñ Ð¾ÑклонÑеÑÑÑ Ð¾Ñ ÑпеÑиÑикаÑии ECMA-262 5-го изданиÑ! Ðднако, в опÑеделÑннÑÑ
ÑлÑÑаÑÑ
(и, возможно, Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми модиÑикаÑиÑми Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
нÑжд), пÑименение данной ÑаÑÑиÑной ÑеализаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ опÑавданнÑм до ÑеÑ
поÑ, пока bind() не ÑÑÐ°Ð½ÐµÑ ÑиÑоко Ñеализован в ÑооÑвеÑÑÑвии Ñо ÑпеÑиÑикаÑией.
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-function.prototype.bind> |