Javascript:获取父级的原型(prototype) `this`

标签 javascript object prototype

我致力于改进一些贝塞尔曲线缓动函数,但this有问题。基本上,是一个 Ease 对象。

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) {

    console.log(this) // this shows the proper object       
    this.mX1 = mX1;
    this.mX2 = mX2;
    this.mY1 = mY1;
    this.mY2 = mY2;

   return _bezier.render;      
};

_bezier.render = function(aX){ 
    console.log(this) // this shows another object
    if (this.mX1 === this.mY1 && this.mX2 === this.mY2) return aX;

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

_bezier.render 函数是绑定(bind)到补间引擎的函数,例如 tween.js ,因此继承了 this,因此 this.mX1 的值和其他与贝塞尔曲线相关的值在 _bezier.render 函数中未定义。

如果我将 this 替换为 _bezier,动画会起作用,但将始终对所有其他动画使用最后一个实例的值。

所以,问题是,有没有办法以某种方式从 _bezier.render 函数内的 _bezier.processBezier 获取 this

或者也许我可以通过绑定(bind)函数来访问正确的this来简化代码?

非常感谢。

最佳答案

尝试使用 .bind() 方法来获取正确的“this”:

// ...
_bezier.processBezier = function (mX1, mY1, mX2, mY2) {

    console.log(this) // this shows the proper object
    this.mX1 = mX1;
    this.mX2 = mX2;
    this.mY1 = mY1;
    this.mY2 = mY2;

    // use .bind(this)
    return _bezier.render.bind(this);
};
// ...

关于Javascript:获取父级的原型(prototype) `this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569200/

相关文章:

javascript - 如何使用 javascript 更改文本颜色?

javascript - 限制 XML 文件中回显的 Ajax 回复数量

javascript - 如何通过 onclick 子组件将数据传递给父组件 react

javascript - 将新属性推送到循环内的当前对象

javascript - 从对象数组到对象

c++ - C++ 中的原型(prototype)

javascript - 将我的 facebook-app 添加到收藏夹的按钮?

c# - null 到底有什么值(value)?

javascript - 原语上的 isPrototypeOf() 函数

javascript - Javascript 中的原型(prototype)对象破坏了 jQuery?