Это методы объекта function. Их суть передавать в нее параметры и переопределять контекст.
Отличие между ними
func_name.call(context,arg1,arg2,...,argN)
var args = [arg1,arg2,...,argN]
func_name.apply(context,args) -- этот метод для удобства, можно в него передавать зарезервированное поле arguments вызывающего объекта(функции).
Это нам позволяет экономить строки написания кода. Определив функционал в одном месте, мы можем его передать в множество следующих объектов без повторного дублирования кода (при этом у каждого будет свой уникальный контекст -- если бы мы использовали прототип, у всех был бы контекст одного объекта, который является для всех прототипом). Вот пример цепочки контрукторов:
или:
Если thisArg не передавать, то им будет как обычно обьект поточного окна.
Отличие между ними
func_name.call(context,arg1,arg2,...,argN)
var args = [arg1,arg2,...,argN]
func_name.apply(context,args) -- этот метод для удобства, можно в него передавать зарезервированное поле arguments вызывающего объекта(функции).
Это нам позволяет экономить строки написания кода. Определив функционал в одном месте, мы можем его передать в множество следующих объектов без повторного дублирования кода (при этом у каждого будет свой уникальный контекст -- если бы мы использовали прототип, у всех был бы контекст одного объекта, который является для всех прототипом). Вот пример цепочки контрукторов:
function product(name, value)
{
this.name = name;
if(value > 1000)
this.value = 999;
else
this.value = value;
}
function prod_dept(name, value, dept)
{
this.dept = dept;
product.call(this, name, value);
this.meth = function(){
alert("name="+this.name);
alert("value="+this.value);
alert("dept="+this.dept);
}
}
prod_dept.prototype = new product();//зачем в примере это не понятно:)
cheese = new prod_dept("feta", 5, "food");
car = new prod_dept("honda", 5000, "auto");
cheese.meth();
car.meth();
или:
function product()
{
if(arguments[0]!==undefined && arguments[1]!==undefined){
this.name = arguments[0];
if(arguments[1] > 1000)
this.value = 999;
else
this.value = arguments[1];
}
}
function prod_dept(name, value, dept)
{
this.dept = dept;
product.apply(product, arguments);
this.meth=function(){
console.log("name="+this.name);
console.log("value="+this.value);
console.log("dept="+this.dept);
}
}
prod_dept.prototype = new product();
cheese = new prod_dept("feta", 5, "food");
car = new prod_dept("honda", 5000, "auto");
cheese.meth();
car.meth();
Если thisArg не передавать, то им будет как обычно обьект поточного окна.
Комментариев нет:
Отправить комментарий