انتقل إلى المحتوى

٥.٣ الطريقة bind()

bind()

التمرين 1: استدعِ obj1.func على obj2 باستخدام call().

var obj1 = {
  val: 1,
  func: function(){
    return this.val + 5;
  }
};

var obj2 = {
  val: 2
};

var result = obj1.func.call(obj2);
console.log(result);

النتيجة هي: 7

التمرين 2: ارجع إلى التمرين 1؛ استبدل call بـ bind.

var obj1 = {
  val: 1,
  func: function(){
    return this.val + 5;
  }
};

var obj2 = {
  val: 2
};

var result = obj1.func.bind(obj2);
console.log(result);

النتيجة كما يلي:

ƒ (){
    return this.val + 5;
  }

التمرين 3: ارجع إلى التمرين 2; result دالة؛ ما نتيجة استدعائها؟

var obj1 = {
  val: 1,
  func: function(){
    return this.val + 5;
  }
};

var obj2 = {
  val: 2
};

var result = obj1.func.bind(obj2);
console.log(result());

النتيجة هي: 7

التمرين 4: استدعِ الدالة التالية باستخدام call().

function greet(name){
  return `Hello dear ${name}`;
}

var result = greet.call(window, "Nawras");
console.log(result);

النتيجة هي: Hello dear Nawras

التمرين 5: ارجع إلى التمرين 4؛ استبدل call بـ bind.

function greet(name){
  return `Hello dear ${name}`;
}

var result = greet.bind(window, "Nawras");
console.log(result);

النتيجة كما يلي:

ƒ greet(name){
  return `Hello dear ${name}`;
}

التمرين 6: ارجع إلى التمرين 5; result دالة؛ ما نتيجة استدعائها؟

function greet(name){
  return `Hello dear ${name}`;
}

var result = greet.bind(window, "Nawras");
console.log(result());

النتيجة هي: Hello dear Nawras

الدالة bind()

العامل bind() تُنشئ دالة جديدة قابلة للاستدعاء، مرتبطة بقيمة this وبوسائط محدّدة.


تدريبات إضافية

التمرين 7: اربط person1.speaks بـ person2 .

var person1 = {
  name: "Sangeeta",
  languages: "Hindi, Sanskrit, and Tamil",
  speaks: function(){
    return `${this.name} speaks ${this.languages}.`;
  }
};


var person2 = {
  name: "Nada",
  languages: "Arabic, French, Spanish, and English"
}

var result = person1.speaks.bind(person2);
console.log(result);

النتيجة كما يلي:

ƒ (){
    return `${this.name} speaks ${this.languages}.`;
  }

التمرين 8: ارجع إلى التمرين 7؛ ما نتيجة console.dir(result)?

var person1 = {
  name: "Sangeeta",
  languages: "Hindi, Sanskrit, and Tamil",
  speaks: function(){
    return `${this.name} speaks ${this.languages}.`;
  }
};


var person2 = {
  name: "Nada",
  languages: "Arabic, French, Spanish, and English"
}

var result = person1.speaks.bind(person2);
console.dir(result);

النتيجة كما يلي:

ƒ bound speaks()
    arguments: (...)
    caller: (...)
    length: 0
    name: "bound speaks"
    __proto__: ƒ ()
    [[TargetFunction]]: ƒ ()
    [[BoundThis]]: Object
        languages: "Arabic, French, Spanish, and English"
        name: "Nada"
        __proto__: Object
    [[BoundArgs]]: Array(0)
        length: 0
        __proto__: Array(0)

الدالة المرتبطة

الدالة المرتبطة دالة ثُبّتت لها قيمة this مع وسائط محدّدة.

التمرين 9: ارجع إلى التمرين 7; result دالة؛ ما نتيجة استدعائها؟

var person1 = {
  name: "Sangeeta",
  languages: "Hindi, Sanskrit, and Tamil",
  speaks: function(){
    return `${this.name} speaks ${this.languages}.`;
  }
};


var person2 = {
  name: "Nada",
  languages: "Arabic, French, Spanish, and English"
}

var result = person1.speaks.bind(person2);
console.log(result());

النتيجة هي: Nada speaks Arabic, French, Spanish, and English.

التمرين 10: اربط الدالة add على obj وبالوسائط 5, 6, 0, 1.

function add(num1, num2, num3, num4){
  return num1 + num2 + num3 + num4;
}

var obj = {
  a: 1,
  b: 2,
  c: 2
};

var result = add.bind(obj, 5, 6, 0, 1);

console.log(result());

النتيجة هي: 12

التمرين 11: اربط min إلى obj، وبالوسائط obj.a و obj.bعلى الترتيب.

function min(a, b){
  return a < b ? a : b;
}

var obj = {
  a: 5,
  b: 10
}

var boundFunction = min.bind(obj, obj.a, obj.b);
console.log(boundFunction());

النتيجة هي: 5

التمرين 12: ارجع إلى التمرين 11؛ غيّر قيمة obj.a على 20. ما نتيجة استدعاء boundFunction?

function min(a, b){
  return a < b ? a : b;
}

var obj = {
  a: 5,
  b: 10
}
obj.a = 20;

var boundFunction = min.bind(obj, obj.a, obj.b);
console.log(boundFunction());

النتيجة هي: 10

التمرين 13: اربط house إلى {}، وبالوسائط f و a.

function house(floor, area){
  return `A ${area} square meter house with ${floor} floor(s)`;
}

var f = 4;
var a = 200;

var boundFunction = house.bind({}, f, a);
console.log(boundFunction());

النتيجة هي: A 200 square meter house with 4 floor(s)

التمرين 14: اربط checkPassword بـ user .

function checkPassword(pass){
  return this.pass.length > 12 ? "Strong" : "Weak";
}

var user = {
  name: "Ali",
  pass: "14789456",
  email: "ali@mail.com"
};

var boundFunction = checkPassword.bind(user);
console.log(boundFunction());

النتيجة هي: Weak

التمرين 15: ارجع إلى التمرين 14؛ غيّر user.pass على 1234567891234.

function checkPassword(){
  return this.pass.length > 12 ? "Strong" : "Weak";
}

var user = {
  name: "Ali",
  pass: "14789456",
  email: "ali@mail.com"
};
user.pass = "1234567891234";

var boundFunction = checkPassword.bind(user);
console.log(boundFunction());

النتيجة هي: Strong

التمرين 16: اربط counting إلى obj.

var counting = function() {
  for(var i=this.firstNum; i<= this.secondNum; i++){
    console.log(i);
  }
  return "done";
}

var obj = {
  firstNum: 10,
  secondNum: 13
};

var boundFunction = counting.bind(obj);
console.log(boundFunction());

النتيجة كما يلي:

10
11
12
13
done

التمرين 17: اربط obj1.starsNo على obj2.

var obj1 = {
  star1: 1,
  star2: 2,
  starsNo: function(){
    return this.star1 + this.star2 + this.star3;
  }
};

var obj2 = {
  star1: 10,
  star2: 20,
  star3: 30
};

var result = obj1.starsNo.bind(obj2)
console.log(result());

النتيجة هي: 60

التمرين 18: اربط calc إلى obj.

function calc(num1, num2, num3){
  return (num1 + num2 + num3 + 5) / this.count;
}

var obj = {
  count: 5
};

var result = calc.bind(obj, 5, 10, 5);
console.log(result());

النتيجة هي: 5