我找不到这不起作用的原因:
var c=document.getElementById("myCanvas"),
ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo.apply(this, [100, 100]);
ctx.stroke();
答案 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, ...)