JavaScript原型对象this指向问题
Posted bear*6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript原型对象this指向问题相关的知识,希望对你有一定的参考价值。
一、this指向
构造函数中的this 指向实例对象。那么原型对象this的指向呢?
如下:
function Student(age,name)
this.age = age;
this.name = name;
var that;
Student.prototype.score = function()
console.log('孩子们成绩都很好!');
that = this;
var xl = new Student(18,'小熊');
xl.score();
console.log(that === xl);
定义一个全局变量that,在score
函数里面给它赋值,让其指向函数里面的this,调用实例对象的score
方法,判断that和实例对象是否一致,如果一致,则说明原型对象this的指向是该实例。
打印结果为:
即原型对象里面放的是方法, 这个方法里面的this 指向的是 这个方法的调用者, 也就是这个实例对象。
二、修改this指向
1、call()方法
写一个简单的两数相加的函数。
function fn(a,b)
console.log(a+b);
console.log(this);
fn(1,2)
在函数内部打印this
,调用函数,看其this
的指向。
可知this
指向window对象
,如果我们想让this指向我们新创建的一个对象,怎么操作呢?
先定义一个对象,
o = ;
然后通过call()
修改this
指向,让其指向新创建的对象o
o =
name: 'xl'
;
fn.call(o,1,2);
打印结果为:
现在this
指向新创建的对象o
,即修改成功。
2、apply()方法
apply()
和call()
方法基本相同,这里就不赘述,直接上代码:
function fn(a,b)
console.log(a+b);
console.log(this);
o =
name: 'xl'
;
fn.apply(o,[1,2]);
可以发现,这两种方法还是有区别的,即:call()
接受的参数必须是连续参数,而apply()
方法接收参数的形式是数组参数。
以上是关于JavaScript原型对象this指向问题的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript this指向ES5组合继承(构造函数+原型对象)错误处理
JavaScript错题记录变量定义提升this指针指向运算符优先级原型继承全局变量污染对象属性及原型属性优先级