先上代码:
没得问题,运行正常。
现在呢,我想在second方法中调用first方法,如下面这样做,你试一下,它不行的。
解决上面代码的一个办法就是指定first方法的接收者foot,如下所示:
上面的代码能正常运行,不过对于foo.first感觉硬编码了,不爽啊,改进一下吧:
一切都很好。
javascript中可以在function中再创建一个function,我来改动一下second方法,在它里面再返回一个function:
请注意,我为了调用second方法中返回的方法,我调用的时候用了双括号()()哦。
以上的代码不会正常运行的,这是因为this变量已经改变了,现在second中的"this"是用的全局中的对象,而不是foo这个object。
解决上面的问题很简单的,在second的方法中先将this的值存在一个临时的变量啊,然后在second中的内部的function中使用那个临时的变量来代替this。这是一个可行的方案,因为javascript的继承支持闭包。because of Javascript’s inherent support for closure.
原文:[url]http://www.neeraj.name/blog/articles/864-understanding-this-in-javascript-object-literal[/url]
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]