一直以来对this的理解只在可以用,会用,却没有去深究其本质。这次,借着《JavaScript The Good Parts》,作了一次深刻的理解。(所有调试都可以在控制台中看到,浏览器F12键)
下面我们一起来看看这个this吧。
在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参)。arguments就是函数实际接受到的参数,是一个类数组。arguments我只做个简略的介绍,重点我们放在this指针上。
在面向对象变成中,this十分重要,它的值取决于调用的模式。而在JavaScript中,一共有4中调用模式:方法调用模式、函数调用模式、构造函数调用模式、apply调用模式。
方法调用模式
当一个函数是作为一个对象的属性时,我们通常称这个函数是这个对象的一个方法。当这个方法被调用时,this就会指向该方法所属对象。
代码如下:
<script type="text/javascript">
var people = {
name : "Yika",
sayName : function(){
console.log(this.name); //"Yika"
//this已经绑定在了people对象上了
}
}
people.sayName();
</script>
如栗子所示,this指向了sayName对象,这种通过this取得所属对象上下文的方法,就是公共方法。(publice method)
函数调用模式
当一个函数被调用时并非某个对象上的方法,那么它就是作为一个函数被调用的。
这种模式调用,this会指向window对象,即使这个函数或许是在外部函数里调用的,我们来看栗子。
代码如下:
<script type="text/javascript">
var name = "window-Yika";
var people = {
name : "people-Yika",
student : function(){
console.log(this); //这里的this绑定的是对象people
function sayName(){
var name = "sayName-Yika";
console.log(this.name); //window-Yika
//即使sayName函数本身和它所在的people对象都有name值,但是this是指向window的
新闻热点
疑难解答
图片精选