apply方法不适用于canvas context lineTo()

时间:2012-08-05 11:17:09

标签: javascript canvas apply

我找不到这不起作用的原因:

var c=document.getElementById("myCanvas"),
ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo.apply(this, [100, 100]);
ctx.stroke();

3 个答案:

答案 0 :(得分:3)

好的,我回答你的问题,谢谢。我认为这指向了ctx变量。

var c=document.getElementById("myCanvas"),
ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo.apply(ctx, [100, 100]);
ctx.stroke();

谢谢,再见;)

答案 1 :(得分:2)

现在,this要么是window ...要么真的不知道如何处理.lineTo,要么this是拥有该功能的任何对象这段代码包含在。

如果此代码未包含在函数中(或者即使它是,如果该函数不是对象的属性,this === window)。

例如:

MyObj.myFunc = function () {
    var c = document.getElementById("myCanvas"),
    //  ..........etc
    ctx.lineTo.apply(this, [100,100]);
};

该代码会使用.lineTo作为MyObj来调用this 如果MyObj不知道如何处理该信息,或.lineTo无法找到所需的属性MyObj,则会失败。

在从this阅读的几乎所有其他情况下,this指的是window,而非写入MyObj = { name : "Bob", sayName : function () { console.log(this.name); // works -- "this"===MyObj var say_it_again = function () { console.log(this.name + ", for the second time"); }; say_it_again(); // second function doesn't work -- "this"===window };

另一个常见的陷阱:函数内部的函数。

this

为了在这种情况下正确定位MyObj = { name : "Bob", sayName : function () { var person = this; // now the reference to "this" is kept in "person" console.log(this.name); // works -- "this"===MyObj var say_it_again = function () { console.log(person.name + ", for the second time"); }; say_it_again(); // works -- "person" refers to the saved variable in the first function // that variable happens to hold a reference to "this" from the first function // which happens to be MyObj }; ,将其保存为第一个函数中的变量,并在第二个函数中引用它。

{{1}}

答案 2 :(得分:0)

lineTo取决于this对象是上下文

通常您将其称为ctx.lineTo(...),隐式设置this=ctx

但是,当您使用.apply时,您可以选择覆盖this

如果您说....lineTo.apply(this, ...),您将this设置为范围内的任何内容(通常是window对象,或者如果您使用点符号,则为其他内容。)< / p>

因此请.....lineTo.apply(ctx, ...)