理解Javascript中的this

先上代码:
var foo = {

first: function(){
console.log('I am first');
},

second: function(){
console.log('I am second');
},
};

foo.first();
foo.second();

没得问题,运行正常。

现在呢,我想在second方法中调用first方法,如下面这样做,你试一下,它不行的。

var foo = {

first: function(){
console.log('I am first');
},

second: function(){
console.log('I am second');
first();
},
};

foo.second();


解决上面代码的一个办法就是指定first方法的接收者foot,如下所示:
var foo = {

first: function(){
console.log('I am first');
},

second: function(){
console.log('I am second');
foo.first();
},
};

foo.second();


上面的代码能正常运行,不过对于foo.first感觉硬编码了,不爽啊,改进一下吧:
var foo = {

first: function(){
console.log('I am first');
},

second: function(){
console.log('I am second');
this.first();
},
};

foo.second();

一切都很好。

javascript中可以在function中再创建一个function,我来改动一下second方法,在它里面再返回一个function:

var foo = {

first: function(){
console.log('I am first');
},

second: function(){
return function(){
this.first();
}
},
};

foo.second()();


请注意,我为了调用second方法中返回的方法,我调用的时候用了双括号()()哦。

以上的代码不会正常运行的,这是因为this变量已经改变了,现在second中的"this"是用的全局中的对象,而不是foo这个object。

解决上面的问题很简单的,在second的方法中先将this的值存在一个临时的变量啊,然后在second中的内部的function中使用那个临时的变量来代替this。这是一个可行的方案,因为javascript的继承支持闭包。because of Javascript’s inherent support for closure.


var foo = {

first: function(){
console.log('I am first');
},

second: function(){
var self = this;
return function(){
self.first();
}
},
};

foo.second()();


原文:[url]http://www.neeraj.name/blog/articles/864-understanding-this-in-javascript-object-literal[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值