1.RT,JS中this指向的问题,让我困扰了很久,也很混乱。我知道
a.全局函数的this指向的是全局;
b.对象内的方法是指向这个对象的;
c.但是闭包里的函数this指向的不是外层函数,而是全局,据说这是语言设计上的缺陷;
可是还有个构造函数,构造函数不使用new来调用的话,里面的this也是指向全局的...,使用new来调用则this指向的是new出来的实例,这些我都了解了些...,那么问题来了,构造函数的原型上的方法里面的this是指向谁的?!
按照我的理解,构造函数的原型也是一个对象,上面的方法应该算作对象的方法,其中的this肯定是指向该对象的,也就是指向构造函数的原型?但是我自己简单试了一下,怎么好像指向的还是new出来的实例对象呢?!
求个明白!THX
谢邀。
看我博客吧
http://www.anchengjian.com/#/...
你要知道函数的4种调用模式
普通函数执行模式:声明一个函数后,直接通过函数的名字调用
this指向全局
构造函数模式: 通过 new 操作符 创建一个对象
this指向构造函数创建出的对象
方法调用模式:通过对象来调用
this指向方法的调用者
上下文模式(call/apply模式)
this指向call/apply的第一个参数
this的指向在运行时才确定,因此要足够留心其运行时的上下文。
JavaScript 之 this 详解。
主要还是看谁调用这个函数.
构造函数的this指向构造函数自身,构造函数的原型可以理解为是构造函数的方法,所以里面的this也是指向构造函数的。用new出来的实例对象,继承了构造函数的原型(原型链),可以调用这些方法,所以构造函数原型上的方法也可以理解为是实例的方法,然后就回到了你提到的第二点:
b.对象内的方法是指向这个对象的
,用实例调用原型上的方法时,方法的内部this指向这个实例对象。谢邀,我大概明白楼主你在纠结什么了。构造函数的this指向的是调用它的实例,这是没有问题了,没有调用它的实例,就不指向任何对象。因为this的指向是由上下文确定的,而你创建了构造函数而不实例一个对象(你也可以认为这个构造函数没有执行),this就不指向任何一个对象
这里举一个简单的例子
推荐一篇文章:张鑫旭:原型对象中的this
参阅:图解 JavaScript this 指向什么
在js中 this总是指向调用函数的那个对象
这个回答适合其他语言,JS简单按照这个理解是有一些问题的...