详解JavaScript原型对象的this指向问题 目录 一.this指向 二.修改this指向 1.call()方法 2.apply()方法 总结 一.this指向 构造函数中的this 指向实例对象.那么原型对象this的指向呢? 如下: function Student(age,name){ this.age = age; this.name = name; } var that; Student.prototype
目录
- 一、this指向
- 二、修改this指向
- 1、call()方法
- 2、apply()方法
- 总结
一、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指向问题
基础教程推荐
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- 直接将值设置为滑块 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01