2015-07-22 2 views
-1

Этот вопрос связан с моим previous question, поэтому я добавлю почти такой же код, как здесь.Передайте аргументы функции в другую функцию через `bind`

Ease.bezier = function(mX1, mY1, mX2, mY2) { 
    return _bezier.processBezier(mX1, mY1, mX2, mY2); 
}; 

var _bezier = Ease.bezier.prototype; 

_bezier.processBezier = function (mX1, mY1, mX2, mY2) { 
    return _bezier.render; // this is where I need the `this`, mX1, mY1, mX2, mY2 to be passed into the next function 
}; 

_bezier.render = function(aX){ //the aX value here comes from another object 
    var mX1 = [bound function attributes[1]]; // I think you can understand what I mean here 
    if (mX1 === mY1 && mX2 === mY2) return aX; 

    if (aX === 0) return 0; 
    if (aX === 1) return 1; 
    return _bezier.computeBezier(_bezier.gx(aX), mY1, mY2);  
}; 

Теперь мне нужно знать, если я могу связать эти две функции так или иначе, не влияя на величину aX приходя из другого объекта и иметь доступ к this и mX1, mY1, mX2, mY2 аргументов в вторую функцию.

Возможно ли это? Как мне это сделать?

+0

Какой 'processBezier' должен был вернуться? – Brennan

+0

Результат функции «render», число, которое находится в графе безье с прогрессией и временной осью. – thednp

+0

Что вы подразумеваете под «и имея доступ к« этому »? Разве это не совсем то, на что ответили в предыдущем вопросе? – Bergi

ответ

2

Возможно, вы можете использовать объект arguments, как это?

_bezier.processBezier = function (mX1, mY1, mX2, mY2) { 
    return _bezier.render.bind(this, arguments); // <--- bind all the arguments and the context "this" 
}; 

_bezier.render = function(){ // <--- aX is not required anymore instead use arguments object 
    var args = arguments[0]; // <--- this corresponds to [mX1, mY1, mX2, mY2] 
    var aX = arguments[1]; // <--- this corresponds to aX now 
    if (args[0] === args[1] && args[2] === args[3]) return aX; // <--- notice args object here 

    if (aX === 0) return 0; 
    if (aX === 1) return 1; 
    return _bezier.computeBezier(_bezier.gx(aX), mY1, mY2);  
}; 
+1

Большое спасибо, журнал консоли отлично. Замечательный ответ. – thednp

+0

И я подтверждаю, ваш ответ сработал. Хорошо заслуженные очки, я бы хотел вознаградить больше очков репутации :) – thednp

+0

Я рад, что это помогло :) – Dhiraj

Смежные вопросы