请问这个函数里面的对象的this是指什么?

自行脑补
  • 1k
function WriteFont(id, options) {
  var self = this;
  this.canvas = document.getElementById(id);
  var obj = {
    canvas: this.canvas;
  }
  .....
  .....
}

前面那个this指向调用这个函数的对象,那么里面对象obj的this是指这个this.canvas = document.getElementById(id)吗?
看过阮一峰大神说的:有一个总的原则,那就是this指的是,调用函数的那个对象。是这样吗?

回复
阅读 2.4k
7 个回答
crp205
  • 3.9k
此时s是赋值,看作 var obj = {
                            canvas: document.getElementById(id)
                        }
                        就行了
spencerht
  • 7.8k

是这样,没错。。
一般来说,函数作用域中的this是统一的。

同梦奇缘
  • 4.1k

如果在全局中调用,this的指向为window

this指向什么,调用this时的执行环境,

var obj = {name:'obj1',getName:function(){return this.name}}//
  这里的`this`就是指向obj的,如果是这样的 `var fn = obj.getName`,然后执行 `fn()`;的时候,执行环境就是指向window的。
  

另外一种情况,在之前的基础上执行这个操作(obj.getName = obj.getName)()时(这种情况是在非严格模式下才可以的),this是指向window的,而执行这个(obj.getName)()的时候,this是指向obj的,是说obj.getName执行赋值操作时,在这里传了一个懒惰函数,懒惰函数的this指向window的,然后后面那个就相当于直接执行的obj.getName().

obj的this和this.canvas中的this,指向的是相同的对象。
当你在全局作用域中调用WriteFont时,且在非严格模式下运行,this指向windows对象。
当var obj = new WriteFont()调用时,WriteFont相当于在obj对象上调用,此时this指向obj这个对象。
“总的原则,那就是this指的是,调用函数的那个对象。”这个原则没有问题。

js里面的this,出了 箭头函数的是根据语法上下文确定的,其他都是根据之行上下文确定的,也就是你在不执行此代码的时候,你不能确认this是什么!!!

niexias
  • 3
新手上路,请多包涵

this是怎么确定的

宣传栏